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

一連の grep でこのトリックを実行できます。

grep -o '[=][a-zA-Z0-9]*' file | grep -o '[a-zA-Z0-9]*'
于 2015-08-09T16:59:05.940 に答える
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 に答える