0

次のような行があり、1300397,0,3,86,some more text here,end writing, another string here表示のみしたい86 end writing場合、sedを使用してそれを行うにはどうすればよいですか?

これまでのところ、私はこれを持っています:sed 's/.*\(8[4-6]\).*/\1/' job_details.txtのみを表示します86。文字列を含めるにはどうすればよいend writingですか?

望ましい結果: 86 end writing

よろしくお願いします。

4

2 に答える 2

2

この行は機能するはずです:

awk -F, '{for(x=1;x<=NF;x++)f=$x~/^8[4-6]$/?$x:f;print f,$NF}'

上記の行は、フィールド/列が等しいかどうかをチェックすることに 注意8[4-6]してください。たとえば、86印刷されますが、88886 or foo86bar or 8622222印刷されません。列に含まれ ているかどうかを確認したいだけの場合は、ワンライナーから8[4-6]削除してください。^ and $

あなたの例で:

kent$ echo "1300397,0,3,86,some more text here,end writing"|awk -F, '{for(x=1;x<=NF;x++)f=$x~/^8[4-6]$/?$x:f;print f,$NF}'
86 end writing

編集

これを試して:

awk -F, '{for(x=1;x<=NF;x++){f=$x~/^8[4-6]$/?$x:f;e=e?e:$x=="end writing"}print f, (e?"end writing":"")}'
于 2013-05-23T09:39:21.933 に答える