Mac shell 脚本的 sed 命令是什么,它将用 myFile.txt 的整个字符串内容替换字符串“fox”的所有迭代。
myFile.txt 将是带有换行符和各种字符的 html 内容。一个例子是
</div>
</div>
<br>
<div id="container2">
<div class="question" onclick="javascript:show('answer2')";>
谢谢!
编辑1
这是我的实际代码:
sed -i.bkp '/Q/{
s/Q//g
r /Users/ericbrotto/Desktop/question.txt
}' $file
当我运行它时,我得到:
sed in place editing only works for regular files.
在我的文件中,Q 被大量汉字取代(!)。奇怪!
您可以使用
r
命令。当您在输入中发现“狐狸”时...
/fox/{
...将其替换为空字符串...
s/fox//g
...并读取输入文件:
r f.html
}
如果您有以下文件:
$ cat file.txt
the
quick
brown
fox
jumps
over
the lazy dog
fox dog
结果是:
$ sed '/fox/{
s/fox//g
r f.html
}' file.txt
the
quick
brown
</div>
</div>
<br>
<div id="container2">
<div class="question" onclick="javascript:show('answer2')";>
jumps
over
the lazy dog
dog
</div>
</div>
<br>
<div id="container2">
<div class="question" onclick="javascript:show('answer2')";>
编辑:要更改正在处理的文件,只需将
-i
标志传递给 sed:
sed -i '/fox/{
s/fox//g
r f.html
}' file.txt
某些 sed 版本(例如我自己的版本)要求您将扩展名传递给
-i
标志,这将是包含文件旧内容的备份文件的扩展名:
sed -i.bkp '/fox/{
s/fox//g
r f.html
}' file.txt
这里和oneliner是一样的,它也兼容Makefile
sed -i -e '/fox/{r f.html' -e 'd}'
最终我采用的方法比我在网上找到的许多解决方案要简单得多:
str=xxxx
sed -e "/$str/r FileB" -e "/$str/d" FileA
支持这样的模板:
str=xxxx
sed -e "/$str/r $fileToInsert" -e "/$str/d" $fileToModify
如果您的文件名也是可变的(例如,
$file
是f.html,而您要更新的文件是$targetfile
):
sed -e "/fox/ {" -e "r $file" -e "d" -e "}" -i "$targetFile"