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

如何使用grep从行中提取特定字段值,grep,Grep,我在一个文件中有如下行 ....... DisplayName="john" .......... 其中,…表示其他字段的可变数量 使用以下grep命令,我能够提取所有具有有效“DisplayName”字段的行: grep DisplayName="[0-9A-Za-z[:space:]]*" e:\test 但是,我只希望从每一行中提取名称(即“john”),而不是从grep返回的整行中提取。我尝试将输出管道化到cut命令中,但它不接受字符串分隔符。特别是: sed 's/.*Displa

我在一个文件中有如下行

....... DisplayName="john" ..........
其中,
表示其他字段的可变数量

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

grep DisplayName="[0-9A-Za-z[:space:]]*" e:\test
但是,我只希望从每一行中提取名称(即“john”),而不是从grep返回的整行中提取。我尝试将输出管道化到
cut
命令中,但它不接受字符串分隔符。

特别是:

sed 's/.*DisplayName="\(.*\)".*/\1/' 
应该这样做,sed语义是s/substitutethis/forthis/其中“/”是分隔符。转义括号和转义1用于保留由括号指定的图案部分。此表达式将所有内容保留在displayname后面的括号内,并将其余内容丢弃

如果您使用:

sed -n 's/.*DisplayName="\(.*\)".*/\1/p'
n选项和p标志告诉sed只打印更改的行

更多信息请访问:

这对我很有用:

awk -F "=" '/DisplayName/ {print $2}'
它返回
“john”
。要删除john的引号,请使用:

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