【问题标题】:With one sed line add text before and after + copy text before colon [closed]用一行 sed 在冒号之前和之后添加文本+复制文本 [关闭]
【发布时间】:2022-01-21 17:42:16
【问题描述】:

是否可以使用一个 sed 换行文件 来自:

文件.txt

docker-image:12347492
image:89899899898

到:

docker tag docker-image:12347492 docker-image:"${BUILD_BUILDNUMBER}"
docker tag image:89899899898 image:"${BUILD_BUILDNUMBER}"

在真实文件中,这种形式的行数很多。

【问题讨论】:

  • 如果你想知道,我猜反对票(不是我的)是因为强烈鼓励展示你已经尝试解决问题的内容,而不是只问 Q。虽然事实上,您包含格式良好的输入数据和预期的输出是一个加分!

标签: bash shell awk sed


【解决方案1】:

这将使用 GNU sed 完成:

sed 's/\(.*\)\(:.*\)/docker tag \1\2 \1:"${BUILD_BUILDNUMBER}"/' your_file

它的工作方式如下:

  • 我记得上面使用\(\)之间的东西(这些是 捕获组)。
  • 因此,第一个捕获组尽可能多地记住一个冒号,其中 第二个捕获组记住其余部分。
  • 然后替换为附加文本,以及第一个 (\1) 的副本和 第二个 (\2) 在适当的位置捕获组。

一旦您确认它可以满足您的需求,只需添加 -i 即可 就地替换:

sed -i 's/\(.*\)\(:.*\)/docker tag \1\2 \1:"${BUILD_BUILDNUMBER}"/' your_file

输入:

docker-image:12347492
image:89899899898

输出:

docker tag docker-image:12347492 docker-image:"${BUILD_BUILDNUMBER}"
docker tag image:89899899898 image:"${BUILD_BUILDNUMBER}"

This page 解释如何使用 sed 很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    相关资源
    最近更新 更多