0

我仍在使用这个小脚本,但仍然遇到问题。得到错误

sed: no input files

我认为问题出在:

for i in `cat sed_output.txt` do sed 's/$oldstr/$newstr/g' > sed_output_new_old_string.txt done

echo "Enter string to be replaced"
read OLDSTRING
echo "Enter string to be placed"
read NEWSTRING
oldstr=$OLDSTRING #string to be replaced
newstr=$NEWSTRING #new string to be placed
echo "Enter folder path where we will find the string"
read FOLDERPATH

### grep oldstring and output it in grep_output.txt
grep -rl $oldstr $FOLDERPATH > grep_output.txt

###  spaces or special characters on filenames, use sed to enclose them with quote 
for i in `cat grep_output.txt`
do sed -e "s/'/'\\\\''/g;s/\(.*\)/'\1'/" grep_output.txt  > sed_output.txt
done

for i in `cat sed_output.txt`
do sed 's/$oldstr/$newstr/g' > sed_output_new_old_string.txt
done
4

1 回答 1

1

如果

  • 您知道需要进行替换的文件
  • 你知道什么需要替换
  • 你知道替代品

然后;

sed 's/substitution/replacement/g' filename

将逐行扫描文件以查找替换文本并将其替换为替换文本。

对于递归替换,您可以这样做;

for file in path/to/folder; do
    sed -i.bak 's/substitute/replacement/g' "$file"
done

-i选项将在文件更改中执行。我添加.bak到它,所以你有原始文件的备份,这些文件将被重命名为file.bak.

如果您在您的中使用变量,sed那么我建议您使用"而不是'这样您的变量被正确插值。

于 2013-07-05T01:11:22.647 回答