首页 > 解决方案 > Perl使用通配符替换文件中的字符串

问题描述

我是 Perl 的新手,正在尝试使用通配符替换文本文件中的一行。示例文件:

This is a text file.

我的工作(非通配符)示例:

file=/home/test.user/test.txt
perl -pi -e 's/This is a text file./'"This is a modified text file."'/g' $file

现在尝试使用通配符进行编辑:

perl -pi -e 's/This*/'"This is a modified text file."'/g' $file

这是不正确的,并输出:

This is a modified text file. is a text file.

如何使用通配符搜索/This*/

标签: perl

解决方案


Perls///使用正则表达式模式来匹配目标,而不是 shell glob 字符串。

而不是*,尝试.*这样:

perl -pi -e 's/This.*/'"This is a modified text file."'/g' $file

.*匹配零或除换行符LF或. 之外的任何字符的出现"\n"

小心,因为它会匹配字符串中任何位置的子字符串。所以这个字符串:

If This is a text file

将成为这个字符串:

If This is a modified text file

因此,如果你想匹配行首,那么使用一个锚点 ^,它坚持模式的其余部分必须在字符串的开头匹配

perl -pi -e 's/^This.*/'"This is a modified text file."'/g' $file

推荐阅读