2012-06-30 69 views
2

文本文件提取我有一個包含一些線作爲以下的文本文件:字符串從與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的命令,但無法弄清楚如何忽略下面的空格中的所有字符。

任何幫助?

回答

2

爲作業使用正確的工具。

$ awk -F '[= ]+' '{ print $6 }' input.txt 
PNO23 
HH34 
P11 
PNI22 
+0

無疑AWK是一個強大的工具,你的代碼將幫助我很多,但我只是好奇與SED即使它是很難達到相同的結果。 – user1492786

+0

在這種情況下使用sed當然並不困難。 「適合正確工作的正確工具」在這方面是錯誤的。 Sed是正確的工具。 Awk更適合表格數據和快速入侵和計算。 Sed使正則表達式更容易,更具說明性。看到我的答案。 –

+0

@JoSo在某些情況下,Sed語法可能會比awk更容易使用正則表達式,但這不是其中的一種。 –

0

把你想在一個反向引用捕獲字符串:

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

或零碎做替代;

sed -e 's/.*=//' -e 's/ .*//' 
0
sed 's/[^=]*=\([^ ]*\) .*/\1/' inputfile 

匹配所有非等號字符和一個等號。捕獲一系列非空格字符。匹配一個空間和該行的其餘部分。替換捕獲的字符串。

2

很抱歉,但有因爲我覺得現有的答案,只是複雜的

sed 's/.*=//; s/ .*//;' inputfile 
1

這可能會爲你工作再添一個:

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

或者,如果你喜歡:

sed 's/.*=\([^ ]*\).*/\1/p;d' file 
0

grep鏈可以做到這一點。

grep -o '[=][a-zA-Z0-9]*' file | grep -o '[a-zA-Z0-9]*'