Woe*_*itg 21 awk regular-expression
我需要使用 awk 搜索关键字,但我想执行不区分大小写(不区分大小写)的搜索。
我认为最好的方法是将搜索词(“关键字”)和 awk 同时阅读的目标行大写。从这个问题我如何使用toupper
以全部大写打印,但我不知道如何在匹配中使用它,因为该答案仅显示打印并且不会将大写文本留在变量中。
这是一个例子,给定这个输入:
blablabla
&&&Key Word&&&
I want all
these text and numbers 123
and chars !"£$%&
as output
&&&KEY WORD&&&
blablabla
Run Code Online (Sandbox Code Playgroud)
我想要这个输出:
I want all
these text and numbers 123
and chars !"£$%&
as output
Run Code Online (Sandbox Code Playgroud)
这是我所拥有的,但我不知道如何添加toupper
:
awk "BEGIN {p=0}; /&&&key word&&&/ { p = ! p ; next } ; p { print }" text.txt
Run Code Online (Sandbox Code Playgroud)
meu*_*euh 25
将您的表达式替换为/&&&key word&&&/
使用$0
当前行显式使用的另一个表达式来匹配模式(即):
tolower($0) ~ /&&&key word&&&/
Run Code Online (Sandbox Code Playgroud)
或者
toupper($0) ~ /&&&KEY WORD&&&/
Run Code Online (Sandbox Code Playgroud)
所以你有了
awk 'tolower($0) ~ /&&&key word&&&/ { p = ! p ; next }; p' text.txt
Run Code Online (Sandbox Code Playgroud)
您需要单引号,因为$0
BEGIN 块可以删除,因为变量默认初始化为""
或0
首次使用时,并且{print}
是默认操作,如下面的评论中所述。
Wou*_*lst 18
gawk 有一个IGNORECASE
内置变量,如果设置为非零,则会导致所有字符串和正则表达式比较不区分大小写。你可以这样使用:
BEGIN{IGNORECASE=1}
/&&&key word&&&/ { foo bar baz }
Run Code Online (Sandbox Code Playgroud)
等等。gawk
不过,这是特定于 的,但我发现它比 meuh 的(更便携)替代方案更具可读性。当然,这是否有问题完全取决于您。
归档时间: |
|
查看次数: |
21141 次 |
最近记录: |