Replace 插入字符串中带“和”的Sed

Replace 插入字符串中带“和”的Sed,replace,sed,insert,Replace,Sed,Insert,我在Ubuntu中使用sed命令来制作shell脚本 我有一个问题,因为我插入的字符串既有单引号,也有双引号。还有破折号。这是EXPAMP: sed-i 16i$'myTable td:containsTrunk do SW-BG-26, 千兆以太网0/22'.parentstr.remove;proba.txt 它应该插入 $('#myTable td:contains("Trunk do SW-BG-26, GigabitEthernet0/22")').parents("tr").remo

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

我有一个问题,因为我插入的字符串既有单引号,也有双引号。还有破折号。这是EXPAMP:

sed-i 16i$'myTable td:containsTrunk do SW-BG-26, 千兆以太网0/22'.parentstr.remove;proba.txt

它应该插入

$('#myTable td:contains("Trunk do SW-BG-26, GigabitEthernet0/22")').parents("tr").remove(); 
在文件proba.txt的第16行中

但它却插入了

$('#myTable td:contains( 
因为它过早退出。如何解决这个问题,我无法在网站上找到解决方案,因为我有两个引号,并且只有一种解释

第二次尝试


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

.parentstr.remove

然后,我也将\放在每个'的前面,但结果是脚本中出现错误。这是第4行:

sed-i 16i$\'myTable td:contains\QinQ tunnel-SCnet wireless\\'.parents\tr\.remove;proba.txt

这就是错误:

4:skripta.sh:语法错误:意外

如果行中有“,/”的话,也许有更简单的方法将该行插入到文件的确切行中

第三次是一种魅力

插入多行上一天我在使用sed时遇到另一个问题。我想插入以下文本:

$document.ready函数{

使用命令:

sed-i 16i$document.ready函数{proba.txt

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

.就绪功能{


对此有何想法?

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

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

sed -f sed.script ...
如果您想在不使用文件的情况下执行此操作,则必须决定是在sed-e表达式周围使用单引号还是双引号。使用单引号通常更容易;不需要担心其他特殊字符。每个嵌入的单引号都由“\”替换:

如果要使用双引号,则每个嵌入的双引号都需要替换为\,但还必须转义嵌入的反引号“、美元符号$和反斜杠\:

切中要害:我在检查带有双引号的脚本之前忘记了转义$;我第一次得到了带有单引号的脚本

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

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

转义双引号、i指令后需要的斜杠和新行以及$due to double quote shell解释

…使用反斜杠转义双引号。在双引号之后或之前使用反斜杠?编辑:抱歉,我没有看到该链接。我会尝试一下。反斜杠在引号之前。您必须在每个q上使用它uote除了最外面的。我在每个双引号前面设置了\除了最外面的引号,但我仍然没有得到我想要的。结果是:.parentstr.remove;然后我也在每个引号前面放置了\但结果是脚本中的一个错误。这是4.行:sed-I 16i$\'myTable td:contains\QinQ tunnel-SCnet wireless\\'。parents\tr\.remove;proba.txt这是错误:4:skripta.sh:语法错误:出乎意料的期待谢谢,我会在早上尝试使用单引号。只要告诉我,如果我使用sed.script,为什么它不同于在控制台中写下它?我有100行要插入类似于这一行的内容,所以我必须创建文件,如果使用sed脚本比我做不到的要容易得多的话hat way改为使bash script.sed直接读取文件,而无需shell解释任何内容。所有转义都是通过shell获取数据所必需的。sed看到的内容与文件中的内容相同;这只是说服shell将文件中的数据传递给sed的问题,尽管它通常对expa有用取消变量和删除引号等等。我在主窗口中写了另一个问题,如果可以的话请看一看。谢谢!你需要阅读我的答案-你需要在$符号前面放上转义反斜杠。事实上,你有一个程序文档,当没有命令参数时,它会悄悄退出。$document captur删除document命令的输出,并将该文本包含在sed脚本中。这就是我使用单引号的原因!我很抱歉强迫您,但我无法在8小时内尝试此操作,我正在尝试获得尽可能多的帮助,以便我可以在早上开始工作。您是真正的pall和heart,我只是这方面的初学者。
sed -e "16i\\
\$('#myTable td:contains(\"Trunk do SW-BG-26, GigabitEthernet0/22\")').parents(\"tr\").remove();" ...
sed -i "6 i\\
\$('#myTable td:contains(\"Trunk do SW-BG-26, GigabitEthernet0/22\")').parents(\"tr\").remove();" proba.txt