首页 > 解决方案 > 'sed' 可以做 'or' 类修剪吗?

问题描述

我正在处理一段代码,但它很难看。它有一条令人讨厌的线:

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

如果找到 , 等中的任何一个BE2RS则将其替换为Alpha Beta Gamma COM/DLX/BE4/BE2/RS。但是,如果找到所有三个,则将替换每个。因为理想的输出是:

ALPHA BETA GAMMA COM DLX BE4 BE2 RS

请问有什么可以在sed中编码吗?它是真正的“NED、JED 或 TED”。或者,可以使用其他Linux吗?

标签: linuxsed

解决方案


我了解您想在一行前面加上您列出的任何替代项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

请参阅在线sed演示

细节

  • -E- 一个 POSIX ERE 启用选项
  • .*- 任何 0+ 个字符
  • \<- 引导词边界
  • (COM|DLX|BE4|BE2|RS)- 匹配COMDLXBE4BE2RS
  • \>- 尾随词边界
  • ALPHA BETA GAMMA &- 替换为ALPHA BETA GAMMA、空格和整个匹配值( &)。

推荐阅读