查找和替换一个给定的输入字符串,比如abc,并替换成另一个字符串,比如文件/tmp/file.txt中的XYZ,最简单的方法是什么?
我正在编写一个应用程序,并使用IronPython通过SSH执行命令-但我不太了解Unix,也不知道该寻找什么。
我听说Bash除了是一种命令行界面外,还可以是一种非常强大的脚本语言。所以,如果这是真的,我假设你可以执行这样的操作。
我可以用bash实现它吗?要实现我的目标,最简单的(一行)脚本是什么?
查找和替换一个给定的输入字符串,比如abc,并替换成另一个字符串,比如文件/tmp/file.txt中的XYZ,最简单的方法是什么?
我正在编写一个应用程序,并使用IronPython通过SSH执行命令-但我不太了解Unix,也不知道该寻找什么。
我听说Bash除了是一种命令行界面外,还可以是一种非常强大的脚本语言。所以,如果这是真的,我假设你可以执行这样的操作。
我可以用bash实现它吗?要实现我的目标,最简单的(一行)脚本是什么?
当前回答
使用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,然后在;我们又在做同样的事情
其他回答
文件操作通常不是由Bash完成的,而是由Bash调用的程序完成的,例如:
perl -pi -e 's/abc/XYZ/g' /tmp/file.txt
-i标志告诉它进行就地替换。
有关详细信息,请参阅man perlrun,包括如何对原始文件进行备份。
你也可以使用ed命令进行文件内搜索和替换:
# delete all lines matching foobar
ed -s test.txt <<< $'g/foobar/d\nw'
参见“使用ed通过脚本编辑文件”。
使用vim编辑器打开文件。命令模式
:%s/abc/xyz/g
这是最简单的
试试下面的shell命令:
find ./ -type f -name "file*.txt" | xargs sed -i -e 's/abc/xyz/g'
Bash与其他shell一样,只是一个协调其他命令的工具。通常您会尝试使用标准的UNIX命令,但当然您可以使用Bash调用任何东西,包括您自己编译的程序、其他shell脚本、Python和Perl脚本等。
在这种情况下,有几种方法可以做到这一点。
如果你想读取一个文件,并将其写入另一个文件,执行搜索/替换,使用sed:
sed 's/abc/XYZ/g' <infile >outfile
如果你想就地编辑文件(就像在编辑器中打开文件,编辑它,然后保存它),向行编辑器'ex'提供指令
echo "%s/abc/XYZ/g
w
q
" | ex file
示例就像没有全屏模式的vi。您可以向它输入与vi的:prompt相同的命令。