使用文件的内容使用SED替换字符串

Eri*_*tto 26 unix bash shell terminal sed

什么是mac shell脚本的sed命令将用myFile.txt的整个字符串内容替换字符串"fox"的所有迭代.

myFile.txt将是带有换行符和各种字符的html内容.一个例子是

    </div>
  </div>
  <br>
  <div id="container2">
    <div class="question" onclick="javascript:show('answer2')";>
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑1

这是我的实际代码:

sed -i.bkp  '/Q/{
s/Q//g
r /Users/ericbrotto/Desktop/question.txt
}' $file
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到:

sed in place editing only works for regular files. 
Run Code Online (Sandbox Code Playgroud)

在我的文件中,Q被大量的中文字符(!)取代.离奇!

bra*_*zzi 54

您可以使用该r命令.当你在输入中找到'狐狸'时......

/fox/{
Run Code Online (Sandbox Code Playgroud)

......一无所获......

    s/fox//g
Run Code Online (Sandbox Code Playgroud)

...并读取输入文件:

    r f.html
}
Run Code Online (Sandbox Code Playgroud)

如果你有一个文件,如:

$ cat file.txt
the
quick
brown
fox
jumps
over
the lazy dog
fox dog
Run Code Online (Sandbox Code Playgroud)

结果是:

$ 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')";>
Run Code Online (Sandbox Code Playgroud)

编辑:要更改正在处理的文件,只需将-i标志传递给sed:

sed -i '/fox/{
    s/fox//g
    r f.html
}' file.txt
Run Code Online (Sandbox Code Playgroud)

某些sed版本(例如我自己的版本)要求您将扩展名传递给该-i标志,该标志将是包含该文件旧内容的备份文件的扩展名:

sed -i.bkp '/fox/{
    s/fox//g
    r f.html
}' file.txt
Run Code Online (Sandbox Code Playgroud)

这和一个衬垫是一样的,它也与Makefile兼容

sed -i -e '/fox/{r f.html' -e 'd}'
Run Code Online (Sandbox Code Playgroud)

  • 您的结果突出显示了在替换开始时添加额外空白行的奇怪性,试图弄清楚如何消除它. (3认同)
  • 你完全摇滚.我选择了一个班轮,但我必须将`d`命令(至少在macOS上)分开:`sed -i -e'/ fox/{r f.html'-e'd'-e'}' file.txt` (2认同)
  • 这需要整行,而不仅仅是我匹配的文本。 (2认同)

bud*_*450 7

最终我使用的东西比我在网上找到的很多解决方案简单得多:

str=xxxx
sed -e "/$str/r FileB" -e "/$str/d" FileA
Run Code Online (Sandbox Code Playgroud)

像这样支持模板:

str=xxxx
sed -e "/$str/r $fileToInsert" -e "/$str/d" $fileToModify
Run Code Online (Sandbox Code Playgroud)

  • 如果匹配的str不是全部在单行上,则这不起作用.即使字符串的一部分匹配,这也会用fileToInsert的内容替换整行 (2认同)