【问题标题】:Awk or Sed: Replace text between special characters (delimiters)awk 或 Sed:替换特殊字符(分隔符)之间的文本
【发布时间】:2013-02-04 20:41:54
【问题描述】:

我对如何替换分隔符之间的文本进行了一些研究,但由于缺乏对 awk 和 sed 的了解,我无法针对我的问题调整命令。我找到了here 最相似的问题,但是在将命令调整为awk '/^(name=|&)/{f=f?0:1}f&&/*/{$0="//" $0}1' file 之后它不起作用。另外,我想使用变量替换而不是在文件中替换。如果我没有问太多,很简短的解释会很棒:)

我在变量$url 和变量$new=unnamed384 中有下一个网址:

http://www.example.com/?name=unnamed293&file=4

我需要用变量$new 替换“name=”和“&”之间的文本。 例如。这是变量$url之前:​​

http://www.example.com/?name=unnamed293&file=4

这是$url之后的变量:

http://www.example.com/?name=unnamed384&file=4

【问题讨论】:

    标签: bash scripting sed awk


    【解决方案1】:

    怎么样:

    $ new="unnamed384"
    
    $ url="http://www.example.com/?name=unnamed293&file=4"
    
    $ sed "s/name=[^&]*/name=$new/" <<< $url
    http://www.example.com/?name=unnamed384&file=4
    

    【讨论】:

    • 这正是我所寻找的。谢谢。
    【解决方案2】:
    s/(.*\?name=)[^\&]*(&.*)/$1$n$2/g
    

    上面的就可以了。 在下面测试(与 perl 一起使用)

    > echo "http://www.example.com/?name=unnamed293&file=4"
    http://www.example.com/?name=unnamed293&file=4
    > echo "http://www.example.com/?name=unnamed293&file=4" | perl -lne '$n="unamed394";$_=~s/(.*\?name=)[^\&]*(&.*)/$1$n$2/g;print'
    http://www.example.com/?name=unamed394&file=4
    > 
    

    【讨论】:

      【解决方案3】:
      $new='unnamed384'; 
      $echo 'http://www.example.com/?name=unnamed293&file=4' | awk -F'[=&]' '{ print $1"=""'"$new"'""&"$3"="$4 }'
      http://www.example.com/?name=unnamed384&file=4
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-26
        • 2019-09-07
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 2021-11-17
        相关资源
        最近更新 更多