首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过Bash命令在文本文件中查找和替换

通过Bash命令在文本文件中查找和替换
EN

Stack Overflow用户
提问于 2009-02-08 19:57:39
回答 14查看 775.8K关注 0票数 652

查找和替换给定输入字符串(例如abc )并替换为另一个字符串(例如/tmp/file.txt文件中的XYZ )的最简单方法是什么

我正在编写一个应用程序,并使用IronPython通过SSH执行命令--但我对Unix不太了解,也不知道该找什么。

我听说Bash除了是一个命令行界面之外,还可以是一种非常强大的脚本语言。因此,如果这是真的,我假设您可以执行这样的操作。

我能用bash做到这一点吗?实现目标的最简单(一行)脚本是什么?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2009-02-08 20:20:30

最简单的方法是使用sed (或perl):

sed -i -e 's/abc/XYZ/g' /tmp/file.txt

由于-i选项,它将调用sed进行就地编辑。这可以从bash调用。

如果你真的只想使用bash,那么下面的方法是可行的:

while read a; do
    echo ${a//abc/XYZ}
done < /tmp/file.txt > /tmp/file.txt.t
mv /tmp/file.txt{.t,}

这个循环遍历每一行,做一次替换,并写入一个临时文件(不想弄乱输入)。最后的移动只是临时移动到原始名称。

对于Mac用户:

sed -i '' 's/abc/XYZ/g' /tmp/file.txt (请参阅下面的注释原因)

票数 1.1K
EN

Stack Overflow用户

发布于 2009-02-08 12:10:32

文件操作通常不是由Bash完成的,而是由Bash调用的程序完成的,例如:

perl -pi -e 's/abc/XYZ/g' /tmp/file.txt

-i标志告诉它进行就地替换。

有关更多详细信息,请参阅man perlrun,包括如何备份原始文件。

票数 177
EN

Stack Overflow用户

发布于 2013-04-09 23:35:27

当我偶然发现这个的时候我很惊讶...

"mysql-server"软件包附带了一个replace命令,因此如果您已经安装了该命令,请尝试使用它:

# replace string abc to XYZ in files
replace "abc" "XYZ" -- file.txt file2.txt file3.txt

# or pipe an echo to replace
echo "abcdef" |replace "abc" "XYZ"

有关这方面的更多信息,请参阅man replace

票数 73
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/525592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档