我的文件中的行如下所示
....... DisplayName="john" ..........
其中....
表示其他字段的可变数量。
使用以下grep命令,我能够提取所有具有有效“DisplayName”字段的行
grep DisplayName="[0-9A-Za-z[:space:]]*" e:\test
但是,我希望从每一行中提取名称(即“john”)而不是grep返回的整行。我尝试将输出流水线化为cut命令,但它不接受字符串分隔符。
答案 0 :(得分:4)
具体做法是:
sed 's/.*DisplayName="\(.*\)".*/\1/'
应该这样做,sed语义是s / subsitutethis / forthis /其中“/”是分隔符。转义括号与转义1的组合用于保持括号指定的模式部分。此表达式将所有内容保留在显示名称后的括号内,并抛弃其余内容。
如果你使用:
,这也可以在没有先使用grep的情况下工作sed -n 's/.*DisplayName="\(.*\)".*/\1/p'
-n选项和p标志告诉sed只打印更改的行。
答案 1 :(得分:4)
这对我有用:
awk -F "=" '/DisplayName/ {print $2}'
返回"john"
。要删除john
使用的引号:
awk -F "=" '/DisplayName/ {gsub("\"","");print $2}'