我在使用 sed 替换值并写入新文件时遇到问题。它写入一个新文件,但无法更改任何值。这是我的代码:
cd/mydirectory
echo "Enter file name:"
read file_input
file1= "$file_input"
file1= "$file1.b"
file2= "$file_input"
file2= "${file2}Ins.b"
sed "/\!cats!/s/\!cats!.*/cats!300!/g $file1>$file2
Run Code Online (Sandbox Code Playgroud)
我只是想用值 300 替换猫之后的任何文本。每当我运行这个脚本时,它都不会用 300 覆盖以前的值。有什么建议吗?
尝试改变
sed "/\!cats!/s/\!cats!.*/cats!300!/g $file1>$file2
Run Code Online (Sandbox Code Playgroud)
到
sed "s/cats.*/cats300/g" $file1 > $file2
Run Code Online (Sandbox Code Playgroud)
要替换文本,您通常必须使用 sed likesed "s/foo/bar/g" file_in > file_out来更改所有出现的foowith barin file_in,将输出重定向到file_out。
编辑
我注意到您正在将输出重定向到同一个文件 - 您不能这样做。您有 2 个选择:
将结果重定向到另一个具有不同文件名的文件。例如:
sed "s/cats.*/cats300/g" $file1 > $file2.tmp
Run Code Online (Sandbox Code Playgroud)
注意.tmp后面的$file2
使用该-i标志(如果使用 GNU sed):
sed -i "s/cats.*/cats300/g" $file1
Run Code Online (Sandbox Code Playgroud)
代表在线i替换。