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

问题描述 投票:0回答:3

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 被大量汉字取代(!)。奇怪!

bash unix shell sed terminal
3个回答
84
投票

您可以使用

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}'

14
投票

最终我采用的方法比我在网上找到的许多解决方案要简单得多:

str=xxxx
sed -e "/$str/r FileB" -e "/$str/d" FileA

支持这样的模板:

str=xxxx
sed -e "/$str/r $fileToInsert" -e "/$str/d" $fileToModify

0
投票

另一种方法(与其他解决方案略有不同):

如果您的文件名也是可变的(例如,

$file
是f.html,而您要更新的文件是
$targetfile
):
sed -e "/fox/ {" -e "r $file" -e "d" -e "}" -i "$targetFile"

© www.soinside.com 2019 - 2024. All rights reserved.