3

我有一个名为“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

4 回答 4

5

您可以随时使用:

/\/some_simple_string$/ { print $0 }

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

于 2013-09-19T07:49:09.260 回答
3

grep '\some_simple_string$' file | tail -n 1应该做的伎俩。

或者如果你真的想使用awkdoawk '/\/some_simple_string/{x = $0}END{print x}'

于 2013-09-19T07:38:53.830 回答
3

要返回一组匹配项中的最后一个,...

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

/some_simple_string/ { x = $0 }
END{ print x }
于 2013-09-19T07:39:37.730 回答
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

或者只是结合起来greptail如果它使使用上下文选项更清楚-A打印以下行:

$ grep -A1 '/some_simple_string$' file | tail -n 1
于 2013-09-19T09:07:39.340 回答