3

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

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

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

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

我怎样才能做到这一点?

4

3 回答 3

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../'
于 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 回答