查找和替换给定输入字符串(例如abc
)并替换为另一个字符串(例如/tmp/file.txt
文件中的XYZ
)的最简单方法是什么
我正在编写一个应用程序,并使用IronPython通过SSH执行命令--但我对Unix不太了解,也不知道该找什么。
我听说Bash除了是一个命令行界面之外,还可以是一种非常强大的脚本语言。因此,如果这是真的,我假设您可以执行这样的操作。
我能用bash做到这一点吗?实现目标的最简单(一行)脚本是什么?
发布于 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
(请参阅下面的注释原因)
发布于 2009-02-08 12:10:32
文件操作通常不是由Bash完成的,而是由Bash调用的程序完成的,例如:
perl -pi -e 's/abc/XYZ/g' /tmp/file.txt
-i
标志告诉它进行就地替换。
有关更多详细信息,请参阅man perlrun
,包括如何备份原始文件。
发布于 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
。
https://stackoverflow.com/questions/525592
复制相似问题