假设有一个多行文本文件
file
,其中一些行以空格开头。$ cat file
foo Baz
baz QUX
QUx Quux
BaZ Qux
BazaaR
进一步假设我希望将所有以关键字开头的行(例如"baz")转换为小写字母,无论该关键字本身是以小写或大写字母(或任何组合)书写的,以及该关键字是否在空格前面。
$ cat file | sought_command
foo Baz # not to lowercase (line does not start with keyword)
baz qux # to lowercase
QUx Quux
baz qux # to lowercase
BazaaR # not to lowercase (line does not start with keyword, but merely with a word containing the keyword)
我认为 awk 是实现这个目标的工具,但是我不确定如何为关键词匹配实现不区分大小写。
$ cat file | awk '{ if($1 ~ /^ *baz/) print tolower($0); else print $0}'
foo Baz
baz qux
QUx Quux
BaZ Qux # ERROR HERE: was not replaced, b/c keyword not recognized.
BazaaR
编辑 1:
添加IGNORECASE=1
似乎解决了大小写不敏感问题,但现在不正确地将最后一行转换为小写。
$ cat file | awk '{IGNORECASE=1; if($1~/^ *baz/) print tolower($0); else print $0}'
foo Baz
baz qux
QUx Quux
baz qux
bazaar # ERROR HERE: should not be converted to lowercase, as keyword not present (emphasis on word!).
/^ *[bB][aA][zZ]/
。 - Scheff's Cat