如何转义长sed字符串中的特殊字符

如何转义长sed字符串中的特殊字符

我想使用 sed 将这个字符串包含在文件的第 115 行。然而,它总是抱怨一些未知的命令。我在其他问题中遵循了其他解决方案,但尚未解决。

sed '115"<"img src="\.\/index_files\/Logo\.png" width="200" height="160" align="right" border="0">"' index.html > test.html

谢谢!

答案1

因为"不是sed命令。正如错误消息中所说,尽管不是很清楚。

地址后面115必须跟一个sed命令,可能是i

  • 然后去掉一些"s。周围<和之后的>
  • 然后不要转义/s,它们不需要转义。
  • 然后不要转义任何内容,因为i命令只接受文本。

这给我们留下了:sed '115 i <img src="./index_files/Logo.png" width="200" height="160" align="right" border="0">'

答案2

用户 richard 很好地描述了您的命令有什么问题sed,并且还提供了正确的编辑脚本来执行您正在尝试的操作。

我提供了一种适用于多种不同情况的替代方法:

sed命令r将在数据流中的当前位置插入文件的内容。

你的sed命令行可以被写

$ sed '115r /dev/stdin' index.html <data.in

sed '115r data.in' index.html如果您想要在第 115 行之后插入的数据存储在文件中data.in,这将具有与...相同的效果。

/dev/stdin是一个特殊文件,其中包含通过标准输入发送的所有内容。

你也可以这样做(使用支持“here-strings”的 shell):

$ sed '115r /dev/stdin' index.html <<<"my string of stuff"

或者

$ sed '115r /dev/stdin' index.html <<<"$myvariableofwonder"

显然,这对于来自其他命令的管道也按预期工作:

$ sed -n '1,10p' myfile | sed '115r /dev/stdin' index.html

这会将 1 到 10 行移植myfileindex.html第 115 行。

相关内容