【问题标题】:Sed removing duplicate characters and certain characters in beginning/end of stringSed 删除字符串开头/结尾中的重复字符和某些字符
【发布时间】:2011-01-16 05:09:51
【问题描述】:

我正在寻求您对 sed 的帮助。我需要从字符串的开头和结尾删除重复的下划线和下划线。

例如:

echo '[Lorem] ~ ipsum *dolor* sit metus !!!' | sed 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._()-]/_/g'

产生: _Lorem____ipsum__dolor__sit_metus____

但我需要将此字符串进一步格式化为:Lorem_ipsum_dolor_sit_metus

换句话说,删除字符串开头和结尾的所有下划线,并将多个连续的下划线符号减少为一个,最好使用另一个管道。

你知道怎么做吗?

谢谢。

【问题讨论】:

  • 在 POSIX 正则表达式中,字符串 '[:alnum:]' 将代替您写出字母数字的可能性。例如。 's/[^[:alnum:]._()-]/_/g'.

标签: unix replace sed


【解决方案1】:

只需在 sed 命令中的 g 之后添加 ;s/__*/_/g;s/^_//;s/_$//

【讨论】:

    【解决方案2】:

    您只需在括号表达式后添加一个“+”即可消除多个下划线的运行。然后你可以删除开始和结束的。此外,正如 ladenedge 所建议的,您可以使用字符类来缩短列表。

    sed 's/[^[:alnum:].()-]\+/_/g;s/^_\(.*\)_$/\1/'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多