你能解释一下 * 是如何工作的吗?
我有一个输入:
U 8649 275 Asia
Canada 3852 25 North America
China 3705 1032 Asia
USA 3615 237 North America
India 1267 746 -Asia
Mexico 762 78 -North America
France 211 55 Europe
Japan 144 120 Asia
England 94 56 Europe
cim
B
BB
BBB
我尝试了一个命令
awk '/B*/' countries
输出是:
U 8649 275 Asia
Canada 3852 25 North America
China 3705 1032 Asia
USA 3615 237 North America
India 1267 746 -Asia
Mexico 762 78 -North America
France 211 55 Europe
Japan 144 120 Asia
England 94 56 Europe
cim
B
BB
BBB
您错过了 的描述中的“空字符串”部分,
*
该部分存在于每一行中。在 awk 中,要匹配一个或多个B,请使用
/B+/
B*
匹配空字符串。每行的每个字符之间都会有一个匹配。这是一个适合您的教育工具:
这个
awk
程序将匹配给定的表达式并将每个匹配替换为匹配的任何匹配,但在括号中。它并不完美,但它服务于最简单的教育目的。sed
对于某些扩展的正则表达式PATTERN
,等效的事情是,awk
使用以下表达式对您的数据运行命令B+
:如您所见,文件底部只有三行包含大写字母
B
,因此只有这些行匹配。另一个例子,只使用
B
:在这里,每个
B
都是单独匹配的。最后,您在问题中的实际表达(我的数据未正确以制表符分隔),使用
B*
:这表明
B*
在整个文件中的每个字符之间匹配,除了在最后运行的多个B
字符之间。[A-Za-z-]
我们也可以用它来显示和之间的区别[A-Za-z-]+
(你之前问过我):