【问题标题】:Replace first four characters of a string替换字符串的前四个字符
【发布时间】:2018-11-15 03:38:30
【问题描述】:

我需要在 Sed 编辑器中使用正则表达式屏蔽 4 个字符后的字符串。

示例:1234567890
结果:1234XXXXXX

你能帮帮我吗?

【问题讨论】:

  • 字符串的长度是否总是相同(在这种情况下为 10 个字符)?
  • 你的文字可以包含空格吗?

标签: regex sed replace mask


【解决方案1】:

关注awk 可能会对您有所帮助。

echo "1234567890" | awk '{for(i=5;i<=length($0);i++){val=val?val "X":"X"};print substr($0,1,4) val;val=""}'

输出如下。

1234XXXXXX

【讨论】:

    【解决方案2】:

    在 GNU sed 中:

    echo "1234567890" | sed "s/./X/5g"
    

    【讨论】:

    • 请注意/5g 的行为是特定于 GNU sed 的。
    【解决方案3】:
    $echo "1234567890"|awk '{for(i=5;i<=NF;i++)$i="X"}7' FS="" OFS=""
    1234XXXXXX 
    

    【讨论】:

      【解决方案4】:

      使用 perl,您可以在替换文本中放入任意 perl 代码:

      perl -pe 's/^(....)(.*)/$1 . "X" x length($2)/e' <<END
      1
      12
      123
      1234
      12345
      123456
      1234567
      12345678
      123456789
      1234567890
      END
      
      1
      12
      123
      1234
      1234X
      1234XX
      1234XXX
      1234XXXX
      1234XXXXX
      1234XXXXXX
      

      【讨论】:

        【解决方案5】:

        使用 sed

        count=4
        echo "1234567890" | \
        sed ':A;s/\(\(.\)\{'"$count"'\}\)\(X*\)[^X]/\1\3X/;tA'
        

        sed -E ':A;s/((.){'"$count"'})(X*)[^X]/\1\3X/;tA'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-14
          • 1970-01-01
          • 1970-01-01
          • 2015-03-15
          • 1970-01-01
          相关资源
          最近更新 更多