我使用的命令是:
objects=shubham
awk -v myvar="$objects" '($0~myvar),/REPLACE/' a.txt
这a.txt文件包含
other-unwanted-content-here
target(shubham)
hello('shubham')
abc
bcd
REPLACE
other-unwanted-content-here
我想要的输出是:
hello('shubham')
abc
bcd
REPLACE
......但是我也得到了target(shubham)
。我怎样才能使带引号的hello('shubham')
* 成为awk开始匹配的地方呢?
2条答案
按热度按时间bjp0bcyl1#
两种方法,取决于你想要什么。
objects
的定义不变,修改awk变量的赋值看到它在https://ideone.com/Bto1hB上运行
objects
以仅匹配目标行看到它在https://ideone.com/nF8MUl上运行
注意,在任何一种情况下,awk中的
~
都是正则表达式操作符;因为在大多数正则表达式形式(包括POSIX ERE)中,(
和)
是语法,所以我们必须将字符串更改为与所需行匹配的正则表达式,而不是恰好包含该行本身。(注意,在这两种情况下,正则表达式中$
前面的反斜杠是shell语法,而不是正则表达式语法本身,之所以需要,只是因为我们使用了双引号;在单引号中,那些反斜杠需要被省略)。ou6hu8tu2#
如果
pattern
对于相关行是唯一的,那么将起始行模式中的变量(使用&&
)与/hello/
组合应该可以解决额外行的问题:输出:
使用mawk 1.3.4在树莓派400上进行测试