我在这里看到了一个文件:
$ more myfile.txt
杰克和吉尔上山了。我的问题是为什么tolower()不适用于第二个单词'jill',在这种情况下:
$ awk'tolower($ 0)〜/ jack /&& / jill / {print FILENAME“:”$ 0; }'* .txt
以下工作但我希望将所有内容保持小写。
$ awk'tolower($ 0)〜/ jack / {print FILENAME“:”$ 0; }'* .txt
myfile.txt:杰克和吉尔上山了。
$ awk'tolower($ 0)〜/ jill / {print FILENAME“:”$ 0; }'* .txt
myfile.txt:杰克和吉尔上山了。
$ awk'tolower($ 0)〜/ jack /&& / Jill / {print FILENAME“:”$ 0; }'* .txt
myfile.txt:杰克和吉尔上山了。
谢谢!
答案 0 :(得分:3)
Operator precedence
确定当不同的运算符在一个表达式中出现时,运算符的分组方式。
~ !~
Matching, nonmatching.
高于
&&
Logical “and”.
您可以将命令更改为
awk 'tolower($0) ~ /jack/ && tolower($0) ~ /Jill/{ print FILENAME ":" $0; }' *.txt
答案 1 :(得分:0)
这可能适合你(gawk和@kev已在他的评论中写过):
awk -vIGNORECASE=1 '/jack/ && /jill/{print FILENAME ":" tolower($0)}' *.txt
N.B。
IGNORECASE
会使所有字符串模式与regexp的案例无关。tolower(
string )
返回字符串的副本,字符串中的每个大写字符都替换为它对应的小写字符。 编辑:
awk '{$0=tolower($0)};/jack/ && /jill/{print FILENAME ":" $0}' *.txt