2

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

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

有什么帮助吗?

4

6 回答 6

2

为工作使用正确的工具。

$ awk -F '[= ]+' '{ print $6 }' input.txt
PNO23
HH34
P11
PNI22
于 2012-06-30T09:31:21.730 回答
2

抱歉,但必须添加另一个,因为我觉得现有的答案太复杂了

sed 's/.*=//; s/ .*//;' inputfile
于 2012-06-30T11:16:04.763 回答
1

这可能对您有用:

sed -n 's/.*=\([^ ]*\).*/\1/p' file

或者,如果您愿意:

sed 's/.*=\([^ ]*\).*/\1/p;d' file
于 2012-06-30T15:04:22.470 回答
0

将要捕获的字符串放在反向引用中:

sed 's/.*=\([^ =]*\) .*/\1/'

或零敲碎打地进行替换;

sed -e 's/.*=//' -e 's/ .*//'
于 2012-06-30T10:41:43.077 回答
0
sed 's/[^=]*=\([^ ]*\) .*/\1/' inputfile

匹配所有非等号字符和一个等号。捕获一系列非空格字符。匹配一个空格和该行的其余部分。替换捕获的字符串。

于 2012-06-30T10:42:42.797 回答
0

一串 grep 可以解决问题。

grep -o '[=][a-zA-Z0-9]*' file | grep -o '[a-zA-Z0-9]*'
于 2015-08-09T16:59:05.940 回答