如何在比赛前打印所有内容?

时间:2012-06-30 00:08:01

标签: bash awk

我正在尝试使用awk match()和substr在匹配发生之前打印所有内容。我在bash脚本中使用awk从文件名中提取字符串,并尝试了以下操作:

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

这给了我3个字符, S 加上跟随它的2个。

但是,我想要在比赛前打印所有内容。

我该怎么做?

3 个答案:

答案 0 :(得分:3)

只是一个小小的重新安排:

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

这告诉AWK从第一个字符开始打印到“S”和接下来的两个字符。

sed得到相同的结果:

简单版(“。S”只能出现一次:

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

如果“.S”可以出现多次,则此版本提供与AWK版本相同的结果(仅保留第一个“.S”及其后续两个字符):

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

修改

perl -nle 'print "$`$&" if /\.S../'

答案 1 :(得分:1)

这应该适合你。

awk '{i = index($0, ".S"); if (i>0) print substr($0, 0, i+5)}'

答案 2 :(得分:0)

我宁愿使用:

sed 's/.S.*//'