【问题标题】:Substitution of the pattern with SED用 SED 替换模式
【发布时间】:2018-01-16 04:16:32
【问题描述】:

我有一个字符串

ATOM   2448  N   LEU   301      -6.821  36.580  65.884  1.00 19.70           O

这里我需要用 NHE 替换第三列中的任何术语(总是等于树大写字母)。

我尝试使用

sed-e 's/[[:upper:]][[:upper:]][[:upper:]]/NHE/g'

但它也替代了第一列中的世界

NHEM   2448  N   NHE   301      -6.821  36.580  65.884  1.00 19.70           O

如何要求 sed 只替换仅由 3 个 any 字母组成的单词(不超过 3 个)?

谢谢!

【问题讨论】:

  • awk '{$4="NHE"; print}' file?
  • @Cyrus,这是一个很好的答案。它会破坏输入的格式。 OP 可以决定这是否有问题。

标签: text sed


【解决方案1】:
sed -r 's/(([^[:blank:]]+[[:blank:]]+){3})\<[[:upper:]]{3}\>/\1NHE/' file
ATOM   2448  N   NHE   301      -6.821  36.580  65.884  1.00 19.70           O

某些系统需要-E 而不是-r

使用 GNU sed,您可以指定 哪个 匹配被替换。在这里,您要替换第 4 个空格分隔的单词:

sed -r 's/[^[:blank:]]+/NHE/4' file

【讨论】:

    【解决方案2】:

    这可能对你有用(GNU sed):

    sed 's/\S\+/NHE/4' file
    

    将第 4 个非空列替换为 NHE

    另一种选择:

    sed 's/\S\S*/NHE/4' file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多