我正在尝试使用awk match()和substr在匹配发生之前打印所有内容。我在bash脚本中使用awk从文件名中提取字符串,并尝试了以下操作:
awk 'match($0,".S") {print substr($0, RSTART+1, 3)}'
这给了我3个字符, S 加上跟随它的2个。
但是,我想要在比赛前打印所有内容。
我该怎么做?
答案 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.*//'