2011-07-22 60 views
16

什么是用于mac shell脚本的sed命令,它将用myFile.txt的整个字符串内容替换字符串“fox”的所有迭代。使用SED文件的内容替换字符串

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由一吨取代汉字(!)。离奇!

+0

见http://stackoverflow.com/questions/6684487/sed-replace-with-variable-with-multiple-lines/6685563#6685563。这将是一个解决方案。祝你好运。 – shellter

+0

关于编辑1 ...您的原始文件可以使用扩展名“.bkp”。你的'question.txt'文件的内容是什么?另外,'$ file'引用的文件的内容是什么。是否有一些二进制文件?他们的编码是什么? – brandizzi

+0

question.txt文件的内容正是上面所示的html。 $文件引用的文件是.txt文件。我的.bkp部分有问题吗?我应该将其更改为.txt吗?我现在将检查我的question.txt文件的编码。 –

回答

40

您可以使用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 

这里是同样的事情,作为一个衬垫,这也与Makefile文件兼容

sed -i -e '/fox/{r f.html' -e 'd}' 
+0

这完全有效!给这个人荣誉勋章!最后一件事Brandizzi ...这是打印到控制台,但不是文件。我们可以得到一些代码来做到这一点吗?太感谢了! –

+0

当然可以!我编辑了我的答案。 – brandizzi

+0

Brandizzi。得到一些奇怪的行为。你能检查我的编辑1吗? –

2

最终我与去比很多解决方案我在网上找到的要简单得多:

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

支持模板,像这样:

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

这实际上有效。 –

+1

如果匹配的str不是全部在单行上,则这不起作用。即使部分字符串匹配,这将用fileToInsert的内容替换整行 – saGii