【发布时间】:2019-05-15 18:47:34
【问题描述】:
我的input 文件有一些需要更改的文本。例如,它有几种可能性;
CONSTANT change/me !KEY2 !KEY3
CONSTANT change/me
CONSTANT change/me !DIFFERENTKEY
总是有一个不变的键(即CONSTANT)不会改变。在需要替换的文本之后还存在不同关键字的可能性。这些用感叹号 (!) 表示,可能没有其他关键字或数千个。我只对替换CONSTANT 之后的文本以及以! 开头的任何可能的键感兴趣。最好使用sed。
以下是我的预期输出。 input中的change/me必须替换为changed;
CONSTANT changed !KEY2 !KEY3
CONSTANT changed
CONSTANT changed !DIFFERENTKEY
我在 SO 上的答案(here 和 here、here)中尝试了不同的东西,但我似乎无法弄清楚。我最接近的来自this链接。
sed -r 's/(^CONSTANT) (.+?) (\!.*$)/\1 changed \3/g' input
结果;
CONSTANT changed !KEY2
CONSTANT change/me
CONSTANT changed !DIFFERENTKEY
我尝试了不同的组合,但此时感觉就像我只是在黑暗中拍摄。
条件:
-
CONSTANT不变 -
change/me是任意文本也可以是blahblah需要更换 -
!KEY不一定是 呈现 -
!KEY可以存在并且可以是多个,但是 总是用空格隔开。我想维护CONSTANT和任何 可能!KEYs。
【问题讨论】:
-
请务必在您的帖子中提及我们应该获得此输出的条件。
-
如果
's/\/me//'不是您所需要的,那么请明确您的要求并提供更好的示例输入/输出来满足您的实际需求。 -
什么意思?
sed会很有用 -
我很困惑如何使它更清楚。好吧,我先考虑一下并删除...
-
@tstev,告诉我们你获得输出的条件应该足够了。