gpt4 book ai didi

linux - 我怎样才能用 sed 排除特定行?

转载 作者:行者123 更新时间:2023-12-04 18:37:27 32 4
gpt4 key购买 nike

我有这个命令来运行 git log 并刷新文件列表:

sed -E 's|(.*): .*|echo \1: $(git log -1 --pretty="format:%ct" \1)|e' app/config/file.yml

我的问题是这个命令刷新 file.yml 中的每一行,但我有一个我不想刷新的前缀。前缀是 web/compile/*

我试图这样做,但不幸的是删除了/web/compile 前缀的所有内容。
sed -i.bkp '/web\/compiled\/*/!e' -E 's|(.*): .*|echo \1: $(git log -1 --pretty="format:%ct" \1)|e' app/config/file.yml

最佳答案

  • 首先,你应该知道使用 sed 修改 yaml 文件有风险 . (我看到你将前导内容保留到最后 : 以避免干扰缩进,但这并不安全)
  • 使用 sed,您可以通过 /pattern/{action} 匹配模式, 这里只填pattern与您的“前缀”路径分开。但是,请仔细检查您的“前缀”,如果有前导空格(缩进),您可能需要 \s*/web/com....
  • 类似于您的 s|pat|rep_or_cmd|e ,您可以使用另一个分隔符进行模式匹配,如果您的模式包含斜杠,我们在最后一项中讨论过。所以\@^\s*/web/compile@会更容易阅读
  • 来解决。你有两种不同的方式来做你想做的事:
    sed '\@^\s*/web/compile@n; s|your s cmd....|' file

  • 或者
        sed '\@^\s*/web/compile@!s|your s cmd....|' file

    笔记

    在您的问题中,您有时写的前缀 web/compile有时 /web/compile ,您应该在 sed 命令中编写正确的并测试。

    关于linux - 我怎样才能用 sed 排除特定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62064800/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com