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

Posted

技术标签:

【中文标题】我将使用啥 GNU/Linux 命令行工具对文件执行搜索和替换?【英文标题】:What GNU/Linux command-line tool would I use for performing a search and replace on a file?我将使用什么 GNU/Linux 命令行工具对文件执行搜索和替换? 【发布时间】:2010-09-14 10:21:11 【问题描述】:

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

能否以正则表达式格式指定搜索文本和替换?

【问题讨论】:

【参考方案1】:
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 版本也支持这些选项。

如果您想了解更多关于 sed 的信息,Cori 推荐了this tutorial。

【讨论】:

我不知道允许扩展正则表达式的 -r 开关 - 方便!此外,-i 是 --in-place 的快捷方式。 如果您想了解更多信息,请使用上面的 cori 链接。 sed 比 perl afaik 更轻量【参考方案2】:

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 的工作。

【讨论】:

【参考方案3】:

将 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,性能都不足以成为问题。使用最容易编写的内容。

【讨论】:

感谢您提供的有用示例!我认为可以通过以下方式(稍微)简化:ruby -pi.bak -e 'gsub(/foo|bar/)|x| x.upcase' *.txt(例如,删除$_)。【参考方案4】:

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

【讨论】:

以上是关于我将使用啥 GNU/Linux 命令行工具对文件执行搜索和替换?的主要内容,如果未能解决你的问题,请参考以下文章

linux下命令行工具gcp显示拷贝进度条

.apt是啥文件?

WSL 使用教程

dockerDocker将运行文件迁移目录

GNU是啥?跟LINUX有啥关系?

WSL 使用教程