塞德 |awk :保持字符串的末尾,直到到达特殊字符



我正在尝试在sed中剪切HDD ID以仅包含驱动器的序列号。该 ID 如下所示:

t10.ATA_____WDC_WD30EFRX2D68EUZN0_________________________WD2DWMC4N2575116

所以,我只想保留"WD2DWMC4N2575116"。序列号不是固定长度的,所以我试图保留最后一个字符,直到出现第一个"_"。不幸的是,我在 RegExp :(

或者如评论中所述,您可以删除从行首到最后_的所有字符:

sed 's/.*_//' file
echo "t10.ATA_____WDC_WD30EFRX2D68EUZN0_________________________WD2DWMC4N2575116" | rev | awk -F '_' '{print $1}' | rev

仅当 ID 位于末尾时,它才有效。

另一个在awk中,这次使用sub

数据:

$ cat file
t10.ATA_____WDC_WD30EFRX2D68EUZN0_________________________WD2DWMC4N2575116

代码 + 结果:

$ awk 'sub(/^.*_/,"")' file
WD2DWMC4N2575116

即替换从第一个字符到最后一个_的所有内容。由于sub返回所做的替换数,该值用于触发隐式输出。如果要处理多个记录,但并非所有记录都有 _ 条,请在sub后添加 ||1

$ cat foo >> file
$ awk 'sub(/^.*_/,"") || 1' file
WD2DWMC4N2575116
foo

最新更新