使用sed命令从文本文件中提取字符串

时间:2012-06-30 09:28:24

标签: string bash shell sed

我有一个文本文件,其中包含以下几行:

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 命令,但无法弄清楚如何忽略空格后面的所有字符。

任何帮助?

6 个答案:

答案 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]*'