awk match() と substr を使用して、一致が発生する前にすべてを出力しようとしています。ファイル名から文字列を取り出すために bash スクリプトで awk を使用しており、次のことを試しました。
awk 'match($0,".S") {print substr($0, RSTART+1, 3)}'
これにより、Sとそれに続く 2 文字の 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../'
これはうまくいくはずです。
awk '{i = index($0, ".S"); if (i>0) print substr($0, 0, i+5)}'
私はむしろ使用したい:
sed 's/.S.*//'