Linux Can';sed';do';或';修课?

Linux Can';sed';do';或';修课?,linux,sed,Linux,Sed,我正在使用一段代码,但它很难看。它有一条令人讨厌的线,沿着这条线: s/COM/ALPHA BETA GAMMA COM/g s/DLX/ALPHA BETA GAMMA DLX/g s/BE4/ALPHA BETA GAMMA BE4/g s/BE2/ALPHA BETA GAMMA BE2/g s/RS/ALPHA BETA GAMMA RS/g 如果发现任何BE2、RS等,则将其替换为Alpha-Beta-Gamma-COM/DLX/BE4/BE2/RS。然而,如果三个都找到了,那么每一

我正在使用一段代码,但它很难看。它有一条令人讨厌的线,沿着这条线:

s/COM/ALPHA BETA GAMMA COM/g
s/DLX/ALPHA BETA GAMMA DLX/g
s/BE4/ALPHA BETA GAMMA BE4/g
s/BE2/ALPHA BETA GAMMA BE2/g
s/RS/ALPHA BETA GAMMA RS/g
如果发现任何
BE2
RS
等,则将其替换为
Alpha-Beta-Gamma-COM/DLX/BE4/BE2/RS
。然而,如果三个都找到了,那么每一个都将被替换。因为理想的输出是:

ALPHA BETA GAMMA COM DLX BE4 BE2 RS

是否有任何方法可以在sed中对其进行编码?它是真正的“NED、JED或TED”。或者,可以使用其他Linux吗?

我知道您想在前面加上一行,其中包含您在
ALPHA-BETA-GAMMA
中列出的任何备选方案

你可以用

echo "COM, DLX, BE4, BE2 and RS" | sed -E 's/.*\<(COM|DLX|BE4|BE2|RS)\>/ALPHA BETA GAMMA &/'
# => ALPHA BETA GAMMA COM, DLX, BE4, BE2 and RS
echo“COM、DLX、BE4、BE2和RS”| sed-E's/*\/ALPHA-BETA-GAMMA&/'
#=>ALPHA-BETA-GAMMA COM、DLX、BE4、BE2和RS

详细信息

  • -E
    -POSIX ERE启用选项
  • *
    -任何0+字符
  • \
    -尾随单词边界
  • ALPHA-BETA-GAMMA&
    -替换为
    ALPHA-BETA-GAMMA
    ,空格和整个匹配值(
    &

我知道您想预先添加一行,其中包含您在
ALPHA-BETA-GAMMA
中列出的任何备选方案

你可以用

echo "COM, DLX, BE4, BE2 and RS" | sed -E 's/.*\<(COM|DLX|BE4|BE2|RS)\>/ALPHA BETA GAMMA &/'
# => ALPHA BETA GAMMA COM, DLX, BE4, BE2 and RS
echo“COM、DLX、BE4、BE2和RS”| sed-E's/*\/ALPHA-BETA-GAMMA&/'
#=>ALPHA-BETA-GAMMA COM、DLX、BE4、BE2和RS

详细信息

  • -E
    -POSIX ERE启用选项
  • *
    -任何0+字符
  • \
    -尾随单词边界
  • ALPHA-BETA-GAMMA&
    -替换为
    ALPHA-BETA-GAMMA
    ,空格和整个匹配值(
    &
    • 这里有一种方法。 对于输入文件.txt:

      NED one
      two TED
      3 JED 4
      
      您可以这样做:

      sed 's/NED\|TED\|JED/ALPHA BETA GAMMA &/g' file.txt
      ALPHA BETA GAMMA NED one
      two ALPHA BETA GAMMA TED
      3 ALPHA BETA GAMMA JED 4
      
      这里有一个方法。 对于输入文件.txt:

      NED one
      two TED
      3 JED 4
      
      您可以这样做:

      sed 's/NED\|TED\|JED/ALPHA BETA GAMMA &/g' file.txt
      ALPHA BETA GAMMA NED one
      two ALPHA BETA GAMMA TED
      3 ALPHA BETA GAMMA JED 4
      


      请在您的帖子中发布示例输入和预期的示例输出。您的意思是您需要吗?我没有想到-我选择了一个糟糕的名称。恐怕不行,真正的值是COM、DLX、BE4、BE2和RS。我认为Ned和Ted更容易理解。@HugMyster,最好在帖子中发布示例,而不是评论,所以请这样做。您已经向我们展示了预期的输出,但仍然没有显示您需要的输入;d通过在上运行所需的工具获得输出。请将缺少的样本输入添加到您的问题中,并且,您已经告诉我们如果找到1会发生什么,如果发现了3个,会发生什么,但你没有告诉我们如果发现了2个,会发生什么,所以也请将这些信息添加到你的问题中。请在你的帖子中发布样本输入和预期的样本输出。你的意思是你需要吗?我没有想到-我选择了一个糟糕的名称。恐怕不行,真正的值是COM、DLX、BE4、BE2和RS。我认为Ned和Ted更容易理解。@HugMyster,最好在帖子中发布示例,而不是评论,所以请这样做。您已经向我们展示了预期的输出,但仍然没有显示您需要的输入;d通过在上运行所需的工具获得输出。请将缺少的示例输入添加到您的问题中,另外,您已经告诉我们如果找到1会发生什么,如果找到3会发生什么,但您没有告诉我们如果找到2会发生什么,所以也将该信息添加到您的问题中。这看起来很有希望,除了COM和DLX的输入,我希望输出“ALPHA-BETA-GAMMA COM DLX”。当输入没有条目(如“MV”)时,输出应该只是“MV”。@HugMyster那么,您有
      COM和DLX
      string吗?您的意思是只想执行一次更换吗?删除
      g
      -请参阅。一个字符串代表所有字符串,是。我正试图得到一个样本,但它们往往是巨大的。现在这看起来很有用!请给我一分钟时间,让我把它通读一遍……@HugMyster可能,你还想把它们作为一个完整的单词来匹配,用
      \
      包装。我更新了解决方案,使它完全回答了这个问题。这看起来很有希望,除了COM和DLX的输入,我希望“ALPHA-BETA-GAMMA COM DLX”的输出。当输入没有条目(如“MV”)时,输出应该只是“MV”。@HugMyster那么,您有
      COM和DLX
      string吗?您的意思是只想执行一次更换吗?删除
      g
      -请参阅。一个字符串代表所有字符串,是。我正试图得到一个样本,但它们往往是巨大的。现在这看起来很有用!请给我一分钟时间,让我把它通读一遍……@HugMyster可能,你还想把它们作为一个完整的单词来匹配,用
      \
      包装。我更新了解决方案,使其完全回答了问题。