【问题标题】:using sed with variable containing url将 sed 与包含 url 的变量一起使用
【发布时间】:2014-04-19 19:13:03
【问题描述】:

80我正在尝试读取一个文件并将占位符替换为另一个文件的内容。问题是变量包含 url,这似乎会导致 sed 出现问题。另外:如何保留 images.txt 中的新行?有没有办法让我的解决方案发挥作用,或者是否有另一种更适合我的问题的解决方案?我想用备份文件的内容覆盖文件的内容。此外,该步骤应包括将占位符替换为第三个文件的内容。谢谢你。 我目前使用的:

<images.html
TEXT=$(<images.txt)
sed 's~URLS~$TEXT~g' imagesbu.html > images.html

这不起作用,只是显示:

sed: -e expression #1, char 80: unknown option to `s'

文件内容为:

https://cdn.tutsplus.com/vector/uploads/legacy/tuts/165_Shiny_Dice/27.jpg
https://cdn.tutsplus.com/vector/uploads/legacy/tuts/165_Shiny_Dice/27.jpg

如果文件中没有换行符,它可以工作。

【问题讨论】:

标签: linux bash sed escaping debian


【解决方案1】:

尝试更改您的 sed 分隔符,使其不是正斜杠:

sed "s~URLS~$TEXT~g" imagesbu.html > images.html

编辑:由于上述原因,您的原始 sed 命令不起作用,并且因为您试图用多行替换单个单词。改用awk

awk -v u="$TEXT" '{gsub(/URLS/,u)}1' imagesbu.html > images.html

【讨论】:

  • 同样的错误,但 char 91。我想我需要转义 $TEXT 中的所有特殊字符。这可能是问题吗?
  • @user2196234 这是因为您使用/ 作为分隔符,而它也在$TEXT 中。寻找另一个不在变量中的变量,因为看起来~ 也在变量中。
  • sed 命令因 images.txt 中包含的换行符而失败 - 您是否尝试将占位符替换为文件中的所有内容?
  • 是的,我愿意。我还想保留换行符,以便以后将它们用作分隔符(如果可能的话)。
  • 占位符是在imagesbu.html 内的单独行中,还是包含在其他文本中?
猜你喜欢
  • 2017-02-01
  • 2013-02-08
  • 1970-01-01
  • 2015-10-01
  • 2018-02-01
  • 2023-01-24
  • 2014-08-23
  • 2013-11-29
  • 1970-01-01
相关资源
最近更新 更多