0

为了获得刚刚添加到系统中的驱动器的名称,我正在检查cat /proc/partitions 在添加驱动器之前和之后创建的两个文件之间的差异。我正在寻找没有分区号数字后缀的驱动器名称。

cat /proc/partitions > /mnt/HD_a2/tempFiles/file1
... add some additional drives to the system
cat /proc/partitions > /mnt/HD_a2/tempFiles/file2

diff /mnt/HD_a2/tempFiles/file1 /mnt/HD_a2/tempFiles/file2 

当我运行 diff 命令时,它返回:

16a17,18
>    8    32    7816704 sdc
>    8    33    7816688 sdc1

当添加 awk 以从以 '>' 为前缀的行上的第 5 列获取值时

 diff /mnt/HD_a2/tempFiles/file1 /mnt/HD_a2/tempFiles/file2 |  awk '">" { print $5 }'

回报是:

-- blank line is returned here--
sdc
sdc1

为了只返回“sdc”,添加了 grep 命令,

diff /mnt/HD_a2/tempFiles/file1 /mnt/HD_a2/tempFiles/file2 |  awk '">" { print $5 }' | grep ^[A-Za-z]+$

但是当我运行命令行时,我根本没有得到任何输出。

如果 grep 命令被替换为

 grep ^[A-Za-z]*$

return 不包括 sdc1,但仍然在 sdc 之前返回一个空行

我有人可以解释我的语法错误,或者提供更好的方法来获取最近添加的新驱动器的名称,我将不胜感激

4

2 回答 2

1
diff /mnt/HD_a2/tempFiles/file1 /mnt/HD_a2/tempFiles/file2 \
|  awk  '">" && NF>2 && $5 !~ /[0-9]$/{ print $5 }'

输出

sdc

NF 表示字段数,您可能希望将其更改为更高的数字,例如 4。您可以使用它来跳过空行或没有足够有价值数据的行。

$5 !~ /[0-9]$/说忽略以数字结尾的行。

s 表示在&&打印字段之前所有这些条件都必须为真$5

IHTH

于 2013-01-13T19:59:27.887 回答
1

您可能想要/^>/,而不是">"在 awk 脚本的开头。此外,请尝试grep '^[[:alpha:]]\+$'跳过空行。

但如果这应该是设备检测的可靠部分,请阅读 udev 脚本。挂钩诸如“块设备已连接”之类的事件并运行自定义脚本是相当容易的。它可能比解析分区文件更简单。

于 2013-01-13T20:00:28.913 回答