3

awk match() と substr を使用して、一致が発生する前にすべてを出力しようとしています。ファイル名から文字列を取り出すために bash スクリプトで awk を使用しており、次のことを試しました。

awk 'match($0,".S") {print substr($0, RSTART+1, 3)}'

これにより、Sとそれに続く 2 文字の 3 文字が得られます。

しかし、私は試合前にすべてを印刷したいと考えています。

どうやってやるの?

4

3 に答える 3

3

ほんの少しの再配置:

awk 'match($0, "\.S") {print substr($0, 1, RSTART + 3)}'

これにより、AWKは、最初の文字から「S」、次の2文字まで印刷するように指示されます。

から同じ結果を得るにはsed

単純なバージョン(「.S」は1回だけ表示できます:

sed 's/\(.*\.S..\).*/\1/'

「.S」が複数回表示される可能性がある場合、このバージョンはAWKバージョンと同じ結果になります(最初の「.S」とそれに続く2つの文字のみが保持されます)。

sed 's/\.S../&\n/; s/\n.*//'

編集:

perl -nle 'print "$`$&" if /\.S../'
于 2012-06-30T01:03:43.573 に答える
1

これはうまくいくはずです。

awk '{i = index($0, ".S"); if (i>0) print substr($0, 0, i+5)}'
于 2012-06-30T00:28:14.280 に答える
0

私はむしろ使用したい:

sed 's/.S.*//'
于 2012-06-30T00:36:50.357 に答える