AWK行尾用正则表达式签名

时间:2013-09-19 07:33:08

标签: regex bash sed awk

我有一个名为“script.awk”的简单awk脚本,其中包含:

/\/some_simple_string/ { print $0;}

我用它来解析一些包含以下内容的文件: (通过使用:cat file | awk -f script.awk)

14 catcat one_two/some_thing
15 catcat one_three/one_more_some_simple_string
16 dogdog one_two/some_simple_string_again
17 dogdog one_four/some_simple_string
18 qweqwe firefire/ppp

我希望脚本只打印完全反映“/ some_simple_string [END_OF_LINE]”而不是2或3的笔划。 有没有简单的方法呢?

我认为,最合适的方法是在正则表达式中添加行尾叹息。 所以它只会解析以“/ some ..”开头的笔画,并在“..string [END_OF_LINE]”的末尾有一个新行

期望的输出:

17 dogdog one_four/some_simple_string

很抱歉混淆,我要求在正则表达式中使用END OF LINE登录。 正确答案是:

/\/some_simple_string$/ { print $0;}

4 个答案:

答案 0 :(得分:5)

您可以随时使用:

/\/some_simple_string$/ { print $0 }

即。不仅匹配“some_simple_string”而且匹配“/ some_simple_string”后跟行尾($是正则表达式中的行尾)

答案 1 :(得分:3)

grep '\some_simple_string$' file | tail -n 1应该可以解决问题。

或者,如果您真的想使用awk执行awk '/\/some_simple_string/{x = $0}END{print x}'

答案 2 :(得分:3)

仅返回一组匹配的 last ,...

将该行存储在变量中并将其打印在END块中。

/some_simple_string/ { x = $0 }
END{ print x }

答案 3 :(得分:1)

要使用正则表达式打印以字符串/some_simple_string结尾的所有匹配项,您需要使用$锚定到该行的末尾。适合这项工作的最合适的工具是grep

$ grep '/some_simple_string$' file

awk中,命令大致相同:

$ awk '/[/]some_simple_string$/' file

要在匹配后打印所有行:

$ awk 'print_flag{print;f=0} /[/]some_simple_string$/{print_flag=1}' file

如果使用上下文选项grep更清楚地打印以下行,则只需合并tail-A

$ grep -A1 '/some_simple_string$' file | tail -n 1