【问题标题】:Replace random string starting and ending using shell command使用 shell 命令替换随机字符串的开始和结束
【发布时间】:2021-07-15 08:14:00
【问题描述】:

感谢任何帮助以找出以下方案的解决方案。

输入:

:50Kfoobar:53B:53B:53Bbaz:53B:53B;:50Kvoocar:53B:53B:53Bbaz:53B:53B

输出:

:50KCREDIT:53B:53B:53Bbaz:53B:53B;:50KCREDIT:53B:53B:53Bbaz:53B:53B

尝试使用以下命令

sed 's/:50K.*:53B/:50KCREDIT:53B/g' <<<':50Kfoobar:53B:53B:53Bbaz:53B:53B;:50Kvoocar:53B:53B:53Bbaz:53B:53B'

producing below result
:50KCREDIT:53B

【问题讨论】:

  • 使用:sed 's/:50K[^:]*:53B/:50KCREDIT:53B/'
  • @anubhava 建议的解释:您的 .*greedy,并且将匹配 everything 直到最后的 538。[^:]*: 使得匹配在每个冒号处停止。
  • 感谢 Anubhava 和 tink 的时间和帮助。
  • 仅供参考!!附上的骗子可以作为参考,但看起来不像是一个确切的骗子。

标签: linux unix awk sed


【解决方案1】:

使用您展示的示例,请尝试以下操作。

awk '{gsub(/:50K[^:]*:53B/,":50KCREDIT:53B")} 1' Input_file

解释: 使用正则表达式 :50K[^:]*:53B 将匹配:50K 直到下一次出现 :(非贪婪匹配)然后匹配:后跟 53B,然后用 :50KCREDIT:53B 全局替换这个匹配的部分,最后打印当前行。

【讨论】:

  • 感谢 Ravinder 的时间和帮助。
猜你喜欢
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 2013-09-10
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 2018-11-14
相关资源
最近更新 更多