Sed与两者"和'在插入字符串中

时间:2014-04-23 15:22:08

标签: replace sed insert

我在Ubuntu中使用sed命令来制作shell脚本。

我遇到了问题,因为我插入的字符串有单引号和双引号。破折号也。这是例子:

  

sed -i" 16i $(' #myTable td:contains(" Trunk do SW-BG-26,   接口GigabitEthernet0 / 22&#34)')父母(" TR"。)除去();" proba.txt

应该插入

$('#myTable td:contains("Trunk do SW-BG-26, GigabitEthernet0/22")').parents("tr").remove(); 

文件proba.txt的第16行

但是它会插入

$('#myTable td:contains( 

因为它过早退出。如何解决这个问题,我在现场找不到解决方案,因为我有两个引号,只有一种解释。

第二次尝试

我在前面设置了每个双引号,除了最外面的引用但我仍然没有得到我想要的东西。结果是:

  

。家长(" TR&#34)除去();

然后我把\放在每个'也是,但结果是脚本错误。这是第4行:

  

sed -i" 16i $(\' #myTable td:contains(\" QinQ隧道 - SCnet无线\")\')。父母(\ " TR \&#34)除去();" proba.txt

这是错误:

  

4:skripta.sh:语法错误:"("意外(期待")")

如果该行有",',/?

,也许有更简单的方法可以在确切的行中将行插入到文件中

第三次是魅力

去年插入了很多行我使用sed遇到了另一个问题。我想插入此文:

  

$(document).ready(function(){

使用命令:

  

sed -i" 16i $(document).ready(function(){" proba.txt

我得到的结果是,作为文档插入的文本是特殊的,或者是因为$:

  

.ready(function(){

有关于此的任何想法吗?

2 个答案:

答案 0 :(得分:0)

有两种解决方法。简单的方法是将脚本放入文件中并在命令行中使用它。例如,sed.script包含:

16i\
$('#myTable td:contains("Trunk do SW-BG-26, GigabitEthernet0/22")').parents("tr").remove();

然后你跑:

sed -f sed.script ...

如果您想在没有该文件的情况下进行此操作,则必须决定是否在sed -e表达式周围使用单引号或双引号。使用单引号通常更容易;没有其他特殊字符需要担心。每个嵌入的单引号都替换为'\''

sed -e '16i\
$('\''#myTable td:contains("Trunk do SW-BG-26, GigabitEthernet0/22")'\'').parents("tr").remove();' ...

如果您想使用双引号,则每个嵌入的双引号都需要由\"替换,但您还必须转义嵌入式引号`,美元符号$和反斜杠\

sed -e "16i\\
\$('#myTable td:contains(\"Trunk do SW-BG-26, GigabitEthernet0/22\")').parents(\"tr\").remove();" ...

(到了这一点:在我用双引号检查脚本之前,我忘了逃避$;我第一次使用单引号获得脚本。)

由于所有额外的检查,我几乎总是使用单引号,除非我需要将shell变量替换为脚本。

答案 1 :(得分:0)

sed -i "6 i\\
\$('#myTable td:contains(\"Trunk do SW-BG-26, GigabitEthernet0/22\")').parents(\"tr\").remove();" proba.txt

转义双引号,i指令后需要的斜线和新行以及$由于双引号shell解释