Unix perl 匹配字符串并删除行

Unix perl 匹配字符串并删除行

我使用 perl 从文件中删除字符串,它从文件中删除字符串,但实际行并未被删除,因此文件的下一个插入将被写入下一行。

使用的 Perl 命令:

host=ABC1234
perl -lpi -e "s/$host//g" /tmp/exclude_list

输出:

ABC1234 

答案1

cp /tmp/exclude_list /tmp/exclude_list.tmp
grep -Fx -v -e "$host" /tmp/exclude_list.tmp >/tmp/exclude_list
rm /tmp/exclude_list.tmp

你会删除每一行确切地匹配 中的字符串$host。更改-Fx为只是-F删除任何行包含字符串。-F如果您想用作$host正则表达式,请不要使用。

或者使用 Perl:

perl -i -sn -e 'print unless /$host/' -- -host="$host" /tmp/exclude_list

perl这里使用的选项-i用于就地编辑,-s允许 Perl$host从命令行实例化 Perl 变量,并且-n仅从 Perl 围绕代码提供的隐式循环内显式打印。将-e实际代码作为参数。

Perl 代码将删除所有与正则表达式不匹配的行$host

用作$host细绳:

perl -i -sn -e 'print unless index($_, $host) >= 0' -- -host="$host" /tmp/exclude_list

相关内容