我将使用哪种GNU / Linux命令行工具来执行文件的搜索和替换?
时间:2020-03-06 14:57:29 来源:igfitidea点击:
我将使用哪种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的工作。
sed,流编辑器,是的,它使用正则表达式。
sed 's/a.*b/xyz/g;' old_file > new_file
GNU sed(我们可能已经拥有了)更加通用:
sed -r --in-place 's/a(.*)b/xy/g;' your_file
以下是这些选项的简要说明:
-i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied) -r, --regexp-extended use extended regular expressions in the script.
FreeBSD版本也支持这些选项。 NetBSD和OpenBSD版本仅支持-r
。
如果我们想了解有关sed的更多信息,Cori建议使用本教程。
考虑将Ruby替代Perl。它像Perl一样偷了Perl的大多数单行命令行args(-i,-p,-l,-e,-n),并自动为我们设置了$ _。有很多正则表达式的优点。另外,与Perl或者sed相比,Ruby的语法可能更舒适并且更易于读取或者编写。 (或者不,取决于口味。)
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的问题。使用最容易编写的内容。