查找和替换一个给定的输入字符串,比如abc,并替换成另一个字符串,比如文件/tmp/file.txt中的XYZ,最简单的方法是什么?
我正在编写一个应用程序,并使用IronPython通过SSH执行命令-但我不太了解Unix,也不知道该寻找什么。
我听说Bash除了是一种命令行界面外,还可以是一种非常强大的脚本语言。所以,如果这是真的,我假设你可以执行这样的操作。
我可以用bash实现它吗?要实现我的目标,最简单的(一行)脚本是什么?
查找和替换一个给定的输入字符串,比如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
补充如果万一可能有用。
其他回答
这是一篇旧文章,但对于任何想要使用变量的人来说,@centurian说单引号意味着不会展开任何内容。
获取变量的一个简单方法是做字符串拼接,因为这是通过在bash中并置完成的,以下应该工作:
sed -i -e "s/$var1/$var2/g" /tmp/file.txt
当我被这个绊倒时,我很惊讶……
“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。
文件操作通常不是由Bash完成的,而是由Bash调用的程序完成的,例如:
perl -pi -e 's/abc/XYZ/g' /tmp/file.txt
-i标志告诉它进行就地替换。
有关详细信息,请参阅man perlrun,包括如何对原始文件进行备份。
试试下面的shell命令:
find ./ -type f -name "file*.txt" | xargs sed -i -e 's/abc/xyz/g'
你可以使用sed:
sed -i 's/abc/XYZ/gi' /tmp/file.txt
如果你不知道你的文件名,你可以使用find和sed:
find ./ -type f -exec sed -i 's/abc/XYZ/gi' {} \;
在所有Python文件中查找并替换:
find ./ -iname "*.py" -type f -exec sed -i 's/abc/XYZ/gi' {} \;