我将使用哪种GNU / Linux命令行工具来执行search和replace文件?

我将使用哪种GNU / Linux命令行工具来执行search和replace文件?

search文本和replace能否以正则expression式格式指定?

sed 's/a.*b/xyz/g;' old_file > new_file 

GNU sed (你可能有)更多功能:

 sed -r --in-place 's/a(.*)b/x\1y/g;' your_file 

以下是对这些选项的简要说明:

-i [SUFFIX], – in -place [= SUFFIX]编辑文件到位(如果提供了扩展名,则进行备份)

-r,–regexp-extended在脚本中使用扩展的正则表达式。

FreeBSD版本也支持这些选项。 NetBSD和OpenBSD版本只支持-r

如果您想了解更多关于sed的信息, Cori建议您使用本教程 。

Perl是这样发明的:

 perl -pi -e 's/foo/bar/g;' *.txt 

这些单引号中的任何正常的s ///模式。 你可以用这样的东西来备份:

 perl -pi.bak -e 's/foo/bar/g;' *.txt 

或管道:

 cat file.txt | perl -ne 's/foo/bar/g;' | less 

但是这真的是更多的工作。

把Ruby看作是Perl的替代品。 它偷了大部分Perl的一行命令行参数( -i-p-l-e-n ),并且像Perl一样自动为你设置$_并且有很多正则表达式。 另外,Ruby的语法可能比Perl或sed更舒适,更容易阅读或写入。 (或不,根据你的口味。)

ruby -pi.bak -e '$_.gsub!(/foo|bar/){|x| x.upcase}' *.txt

perl -pi.bak -e 's/(foo|bar)/\U\1/g' *.txt

在许多情况下,在处理单行程时,性能不足以解决您使用轻量级sed或重量级Perl或更重量级的Ruby的问题。 使用最简单的方法来编写。

sed ,流编辑器,是的,它使用正则表达式。