从Bash命令中查找并替换文本文件中的内容

13 浏览
0 Comments

从Bash命令中查找并替换文本文件中的内容

如何在文件 /tmp/file.txt 中查找并替换给定的输入字符串(例如abc ),并用另一个字符串(例如XYZ)替换?

我正在编写一个应用程序,并使用IronPython通过SSH执行命令 - 但我对Unix并不熟悉,不知道要查找什么。

我听说Bash除了是一个命令行接口外,还可以成为一个非常强大的脚本语言。那么,如果这是真的,我想你可以执行这些操作。

我可以使用bash吗?实现我的目标最简单(一行)的脚本是什么?

admin 更改状态以发布 2023年5月19日
0
0 Comments

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

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

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

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

0
0 Comments

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

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

这将调用sed执行一个就地编辑,因为选项-i。可以从bash中调用此选项。

如果您真的非常想使用bash,那么以下内容可以起作用:

while IFS='' read -r 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

(请参见下面的评论原因)

0