如何使用grep从行中提取特定的字段值

时间:2010-06-18 13:48:24

标签: grep

我的文件中的行如下所示

....... DisplayName="john" ..........

其中....表示其他字段的可变数量。

使用以下grep命令,我能够提取所有具有有效“DisplayName”字段的行

grep DisplayName="[0-9A-Za-z[:space:]]*" e:\test

但是,我希望从每一行中提取名称(即“john”)而不是grep返回的整行。我尝试将输出流水线化为cut命令,但它不接受字符串分隔符。

2 个答案:

答案 0 :(得分:4)

具体做法是:

sed 's/.*DisplayName="\(.*\)".*/\1/' 

应该这样做,sed语义是s / subsitutethis / forthis /其中“/”是分隔符。转义括号与转义1的组合用于保持括号指定的模式部分。此表达式将所有内容保留在显示名称后的括号内,并抛弃其余内容。

如果你使用:

,这也可以在没有先使用grep的情况下工作
sed -n 's/.*DisplayName="\(.*\)".*/\1/p'

-n选项和p标志告诉sed只打印更改的行。

更多信息:http://www.grymoire.com/Unix/Sed.html

答案 1 :(得分:4)

这对我有用:

awk -F "=" '/DisplayName/ {print $2}'

返回"john"。要删除john使用的引号:

awk -F "=" '/DisplayName/ {gsub("\"","");print $2}'