如何用Awk正则表达式匹配文件中的单引号和双引号并输出对应行
用Awk查找同时包含单引号和双引号的行
没问题,这就教你用Awk快速定位文件里同时包含单引号(')和双引号(")的行——Awk处理这种文本匹配本来就很顺手,直接用正则或者多条件判断就能搞定,给你几种实用的写法:
最直观的多条件写法
这种方式逻辑清晰,新手也一眼能看懂:只要某行同时包含单引号和双引号,就打印出来。
因为shell会处理引号的嵌套,所以分两种输入方式:
- 用单引号包裹Awk脚本(推荐,避免很多转义麻烦):
awk '/'\''/ && /"/' your_file.txt
这里的/'\''/是shell里单引号的转义技巧——简单说就是先关闭当前的单引号,转义一个单引号,再重新打开单引号,这样Awk就能识别到要匹配的单引号了。
- 用双引号包裹Awk脚本:
awk "/'/ && /\"/" your_file.txt
这种情况下,双引号里的双引号需要用\转义,不然shell会把它当成脚本的结束符。
单个正则表达式写法
如果你想用一个正则表达式搞定,可以匹配两种引号的任意出现顺序:
awk '/'\''.*"|".*'\''/' your_file.txt
正则里的|表示“或”,' .* " 匹配先出现单引号再出现双引号的行," .* ' 匹配先出现双引号再出现单引号的行,合起来就能覆盖所有同时包含两种引号的情况。
同样,用双引号包裹脚本的版本是:
awk "/'.*\"|\".*'/" your_file.txt
写在Awk脚本文件里的情况
如果是把逻辑写到单独的Awk脚本文件(比如match_quotes.awk)里,就不用管shell的转义了,直接写清晰的逻辑:
# 匹配同时包含单引号和双引号的行 /'/ && /"/ { print }
然后用下面的命令执行:
awk -f match_quotes.awk your_file.txt
举个例子验证
假设你的文件test.txt内容如下:
Hello world
He said "it's mine"
She yelled 'I don't like "this"'
Just single 'quote here
Just double "quote here
运行上面的任意命令,都会输出第二行和第三行——这两行正好同时包含两种引号。
内容的提问来源于stack exchange,提问作者sushma nagabandi
相关产品推荐
相关产品推荐

