我将使用什么 GNU/Linux 命令行工具来对文件执行搜索和替换?
可以以正则表达式格式指定搜索文本和替换吗?
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 的工作。
将 Ruby 视为 Perl 的替代品。它像 Perl 一样为您窃取了大部分 Perl 的单行命令行参数 ( -i
, -p
, -l
, -e
, -n
) 和自动设置$_
,并且有很多正则表达式的优点。此外,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,流编辑器,是的,它使用正则表达式。