我有一个文本文件,其中包含以下几行:
ASDASD2W 3ASGDD12 SDADFDFDDFDD W11 ACC=PNO23 DFSAEFEA EAEDEWRESAD ASSDRE
AERREEW2 3122312 SDADDSADADAD W12 ACC=HH34 23SAEFEA EAEDEWRESAD ASEEWEE
A15ECCCW 3XCXXF12 SDSGTRERRECC W43 ACC=P11 XXFSAEFEA EAEDEWRESAD ASWWWW
ASDASD2W 3122312 SDAFFFDEEEEE SD3 ACC=PNI22 ABCEFEA EAEDEWRESAD ASWEDSSAD
...
我必须为每一行提取'='字符和以下空格之间的子字符串,即
PNO23
HH34
P11
PNI22
我一直在使用 sed 命令,但无法弄清楚如何忽略空格后面的所有字符。
任何帮助?
答案 0 :(得分:2)
使用正确的工具完成工作。
$ awk -F '[= ]+' '{ print $6 }' input.txt
PNO23
HH34
P11
PNI22
答案 1 :(得分:2)
很抱歉,但必须添加另一个,因为我觉得现有的答案只是复杂的
sed 's/.*=//; s/ .*//;' inputfile
答案 2 :(得分:1)
这可能对您有用:
sed -n 's/.*=\([^ ]*\).*/\1/p' file
或者,如果您愿意:
sed 's/.*=\([^ ]*\).*/\1/p;d' file
答案 3 :(得分:0)
将要捕获的字符串放在反向引用中:
sed 's/.*=\([^ =]*\) .*/\1/'
或替代零碎;
sed -e 's/.*=//' -e 's/ .*//'
答案 4 :(得分:0)
sed 's/[^=]*=\([^ ]*\) .*/\1/' inputfile
匹配所有非等号符号和等号。捕获一系列非空格字符。匹配空间和线的其余部分。替换捕获的字符串。
答案 5 :(得分:0)
一连串的grep可以解决问题。
grep -o '[=][a-zA-Z0-9]*' file | grep -o '[a-zA-Z0-9]*'