如何使用 AWK 将仅包含数字“0”的行替换为空白行?

如何使用 AWK 将仅包含数字“0”的行替换为空白行?

我正在寻找一个命令来替换包含的行仅有的其列中的数字为 0,并带有“空白”行。

例如我有以下输入:

Taj_Mahal                                             Agra                       
                                                        0                             
                                                        0               
Chichen_Itza                                          Yucatán              
                                                        0                             
                                                        0               
Christ_the_Redeemer                                   Rio_de_Janeiro              
                                                        0                             
                                                        0               
Colosseum                                             Rome                 
                                                        0                             
                                                        0               
Great_Wall_of_China                                   China                      
                                                        0                             
                                                        0               
Machu_Picchu                                          Cuzco_Region                     
                                                        0                             
                                                        0               
Petra                                                 Ma'an_Governorate                   
                                                        0                             
                                                        0               
Great_Pyramid_of_Giza                                 Egypt                   
                                                        0                             
                                                        0               

下面应该是输出:

Taj_Mahal                                             Agra                       


Chichen_Itza                                          Yucatán              


Christ_the_Redeemer                                   Rio_de_Janeiro              


Colosseum                                             Rome                 


Great_Wall_of_China                                   China                      


Machu_Picchu                                          Cuzco_Region                     


Petra                                                 Ma'an_Governorate                   


Great_Pyramid_of_Giza                                 Egypt                   

答案1

编辑您的帖子后,示例输入中的行似乎不包含“仅”零。它们包含许多空格和一个零。如果是这种情况,使用 awk:

awk 'NF==1 && $1=="0" { $0="" } { print }'

$0 指整行。 NF指的是字段的数量。 $1 指的是第一个字段。默认情况下,awk 会去除前导/尾随空格。

或者,使用正则表达式匹配:

 awk '/^ *0 *$/ { $0="" } { print }'

{ print }通过替换为可以使解决方案更加简洁(并且神秘)1,但即便如此, sed 仍然会更加简洁:

sed 's/^ *0 *$//'

请注意,第一个 awk 建议忽略前导和尾随空白(可能包括制表符和其他与语言环境相关的字符)。第二个 awk 和 sed 方法仅忽略前导/尾随空格。

相关内容