解析某个字符串的文本文件,前缀为“Product Name:”

时间:2011-08-15 17:25:17

标签: bash sed grep

嘿伙计我有一个脚本创建的文本文件(特别是dmidecode > dmidecode.txt),我希望能够获取“产品名称:”的内容,所以在这种情况下“HP t5740e Thin Client”但对于其他机器类型,它会略有不同。我可以使用sed计算到第44行然后将其切片直到我得到我想要的但我希望它比那更有活力。

文字档案:

41  Handle 0x0001, DMI type 1, 27 bytes
42  System Information
43      Manufacturer: Hewlett-Packard
44      Product Name: HP t5740e Thin Client
45      Version:   
46      Serial Number: CNW1160BZ7
47      UUID: A0B86400-6BBD-11E0-8325-92EEE331A344
48      Wake-up Type: Power Switch
49      SKU Number: XL424AA#ABA
50      Family: 103C_53302C

我的代码似乎不起作用:

sed -c -i "s/\($TARGET_KEY *Product Name :*\).*/\1$REPLACEMENT_VALUE/" dmidecode.txt

我感觉我的正则表达式已经过时了(可能是因为我看到的最初的例子污染了我的“愿景”)

非常感谢任何帮助! 另外,任何人都知道我可以查看的任何好的正则表达式引用吗?

更新: 好的,我可以花更多的时间在这上面,找到一些更好的例子,并从我的研究中得到这个:

grep -e "Product Name: HP" -e "Product Name: hp" dmidecode.txt | awk '{print}'

当我添加'{print $NF}'时,它只打印最后一个单词,有没有办法修改print以包含搜索字符串之后的所有内容而不是整行本身?

另外,我应该从一开始就注意到这一点,但我需要将输出转换为变量。

3 个答案:

答案 0 :(得分:6)

你甚至不需要那个

的sed
grep "Product Name" input.txt | cut -f2 -d ":"

解释

grep "Product Name"仅向我提供包含“产品名称”

的行

cut -f2 -d ":"使用“:”作为分隔符并返回第二个字段

来拆分这些行

答案 1 :(得分:3)

使用sed:

sed -n -e '/Product Name/{s/.*://p}'

如果您想在:之后删除空格:

sed -n -e '/Product Name/{s/.*: *//p}'

答案 2 :(得分:2)

awk -F ": " '$1 ~ /Product Name$/ {print $2}' dmidecode.txt