【问题标题】:I need to replace a string using SED with an url我需要使用 SED 将字符串替换为 url
【发布时间】:2013-03-14 22:21:49
【问题描述】:

当我使用像a=10这样的正常值时

我能够让 sed 查找/替换工作

  sed -e "s/xxx/$a/g" a.txt

但是当我尝试使用像a=http://xyz.com这样的变量时

sed -e "s/xxx/$a/g" a.txt 不工作...

我认为它抛出未知选项错误是由于变量上存在转义字符

【问题讨论】:

    标签: linux shell sed


    【解决方案1】:

    使用 awk,您的字符串可以包含任何字符,包括 /、@、换行符等:

    $ a="http://xyz.com"
    $ echo "<xxx>" | awk -v a="$a" '{gsub(/xxx/,a)}1
    <http://xyz.com>
    

    【讨论】:

      【解决方案2】:

      试试这个:

      sed -e "s@xxx@$a@g" a.txt 
      

      【讨论】:

      • ...直到您的 URL 包含“@”符号:-)。
      • @EdMorton ^_^ 对! ...哼。也许sed -e "s&gt;xxx&gt;$a&gt;g" a.txt
      • 我认为不能保证 URL 不包含“>”,但我不是 URL 专家。就个人而言,我只是不会在 URL 或文件名(也可以包含几乎任何字符)上使用 sed - 这样我就不必担心它:-)。当然,如果您可以完全控制名称并且可以保证它们包含/不包含哪些字符,那就另当别论了。
      • @EdMorton 似乎 &lt;,&gt; 是 url 的无效字符。 stackoverflow.com/questions/7109143/… 但是,如果有一个不需要这些问题的解决方案,你是对的……我们应该这样做。
      • @Kent 如果 不能成为 URL 的一部分,那肯定是有意义的,所以我认为您可能是对的,这些是 sed 在 URL 上的安全分隔符。不确定您是否打算将“,”作为安全集合的一部分,但要明确的是不是。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2021-12-18
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多