【问题标题】:sed or perl replace characters leaving some text intact [duplicate]sed 或 perl 替换字符,使某些文本保持不变[重复]
【发布时间】:2012-09-12 18:32:31
【问题描述】:

可能重复:
sed replace characters leaving some text intact

如何使用 sed(或者 perl)替换一些字符,但保留未知数字不变 in.e.在文件中有多个这样的行:

<"START=xxx">
<"START=yyy">
<"START=zzz">

“xxx”、“yyy”和“zzz”是不同的未知值(数字)。我想删除结尾 "> 并替换它,也替换开头(但这对我来说并不难)所以最后文件看起来像这样:

<START>xxx</START>
<START>yyy</START>
<START>zzz</START>

提前谢谢你!

【问题讨论】:

  • 新用户提示:你认为以前有人问过吗? :-)
  • @Fredrik ha :) 可能不知道如何编辑问题。 edit:如果您查看 cmets,似乎并非如此:/ 不知道 .. 我投票赞成完全重复。

标签: perl replace sed


【解决方案1】:

应该这样做:

sed 's;<"\([^=]\+\)=\([^"]\+\)">;<\1>\2</\1>;' file

但是请记住,使用面向行的工具处理 xml 之类的内容并不是正确的方法,除非格式非常严格,并且案例集中在格式语言的严格且定义明确的子集上.

【讨论】:

    【解决方案2】:
    awk -F"=" '{gsub(/\"|<|>/,"");print "<"$1">"$2"</"$1">"}' your_file
    

    测试如下:

    > cat temp
    <"START=xxx">
    <"START=yyy">
    <"START=zzz">
    > awk -F"=" '{gsub(/\"|<|>/,"");print "<"$1">"$2"</"$1">"}' temp
    <START>xxx</START>
    <START>yyy</START>
    <START>zzz</START>
    

    【讨论】:

      【解决方案3】:

      为了好玩,一个 Perl 解决方案:

      perl -pe's#<"(.+?)=(\d+)">#<$1>$2</$1>#' <file >outfile
      

      perl -pie's#<"(.+?)=(\d+)">#<$1>$2</$1>#' file
      

      就地替换

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-18
        • 2015-01-05
        • 1970-01-01
        • 2015-04-18
        • 1970-01-01
        • 2014-07-30
        • 1970-01-01
        • 2020-11-15
        相关资源
        最近更新 更多