Perl 搜索和替换

Perl 搜索和替换

如何使用搜索和替换来更改文件的内容。

我需要能够将“全部改为无”和/或“将无改为全部”而不必每次都手动执行数百行。

下面是一个示例文本文件,右侧有行号。我已经知道如何打开和关闭文件进行写入。

线条

1 define_filter absolute_minimal_filter ------- 全部
2 define_filter atma_basic_filter -------- ----- 无
3 define_filter atma_communication_filter -- 全部
4 define_filter atma_health_filter ------------- 无
5 define_filter atma_misc_filter --------------- 全部
6 define_filter atma_performance_filter ---- 无
7 define_filter atma_supplemental_filter ---- 无

答案1

使用精心选择的字符串代替“temp”(两处):

sed 's/all/temp/g;s/none/all/g; s/temp/none/g' input_file > output_file

或者,如果“all”和“none”从不出现在同一行并且始终结束该行,则不使用临时字符串:

sed 's/all$/none/;t;s/none$/all/' input_file > output_file

答案2

出于兴趣,Perl 解决方案与 sed 解决方案非常相似:

perl -pi.bak -e 's/all$/none/ || s/none$/all/' input_file

编辑:我第一次漏掉了“||”。作为单独的语句,第二个语句会撤消第一个语句。哎呀!

相关内容