我将使用什么GNU / Linux命令行工具来执行文件的搜索和替换?

时间:2008-10-01 02:02:56

标签: regex linux sed gnu

我将使用哪种GNU / Linux命令行工具来执行搜索和替换文件?

可以用正则表达式格式指定搜索文本和替换吗?

4 个答案:

答案 0 :(得分:51)

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版本也支持这些选项。 NetBSDOpenBSD版本仅支持-r

如果您想详细了解sed,Cori建议this tutorial

答案 1 :(得分:27)

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

但那真的更像是sed的工作。

答案 2 :(得分:6)

将Ruby视为Perl的替代品。它窃取了Perl的大部分单行命令行args(-i-p-l-e-n)并自动设置$_对于你喜欢Perl而且有很多正则表达式的善良。此外,Ruby的语法可能比Perl或sed更舒适,更易于阅读或书写。 (或者不是,取决于你的口味。)

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

VS

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

在许多情况下,当处理单行时,无论是使用轻量级sed还是重量级Perl还是重量级Ruby,性能都不足以解决问题。使用最容易写的东西。

答案 3 :(得分:5)

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