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

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

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

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


当前回答

如果在多个文件中一起做更改,我们可以在一行中做:-

user_name='whoami'
for file in file1.txt file2.txt file3.txt; do sed -i -e 's/default_user/${user_name}/g' $file; done

补充如果万一可能有用。

其他回答

你也可以使用ed命令进行文件内搜索和替换:

# delete all lines matching foobar 
ed -s test.txt <<< $'g/foobar/d\nw' 

参见“使用ed通过脚本编辑文件”。

对于MAC用户,如果你没有读评论的话:)

正如@Austin提到的,如果您得到无效的命令代码错误

对于就地替换,BSD sed要求在-i标志之后添加一个文件扩展名,以保存到具有给定扩展名的备份文件中。

Sed -i '.bak'的/find/replace' /file.txt

如果您想跳过备份,可以使用“空字符串”。

Sed -i " 's/find/replace' /file.txt

这都是奥斯汀的功劳

试试下面的shell命令:

find ./  -type f -name "file*.txt" | xargs sed -i -e 's/abc/xyz/g'

使用sed命令替换文件中多个文本的最简单方法

命令- - - - - -

sed -i s#a/b/c#D/E#g;s#/x/y/z#D:/ x #g

在上面的命令s#a/b/c#D/E#g中,我用D/E替换a/b/c,然后在;我们又在做同样的事情

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

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

由于-i选项,它将调用sed执行就地编辑。这可以从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

(原因请看下面的评论)