gpt4 book ai didi

sed oneliner 在另一行之前添加一行

转载 作者:行者123 更新时间:2023-12-02 23:28:56 27 4
gpt4 key购买 nike

我需要在每行 foosed 之前添加一行 bar

我需要在 Makefile 中执行此操作,因此我不能使用 i\ 因为它需要标准 sed 中的换行符(不是 GNU sed,例如, Mac OS X),而这不能在 Makefile 中完成(至少不能很好地完成)。

我找到的解决方案是:

sed '/foo/{h;s/.*/bar/;p;g;}' < in > out

这将保存该行,用 bar 替换其内容,打印新行,恢复旧行(并默认打印它)。

有没有更简单的解决方案?

最佳答案

BSD sed

这会将 bar 放在带有 foo 的每一行之前:

sed $'/foo/{s/^/bar\\\n/;}' in >out

GNU sed

这会将 bar 放在带有 foo 的每一行之前:

sed '/foo/{s/^/bar\n/;}' in >out

它是如何工作的

  • /foo/

    这将选择包含 foo 的行。

  • s/^/bar\n/

    ^ 匹配行的开头。因此,对于选定的行,这会替换行开头的 bar\n 。这实际上在包含 foo 的行之前添加了一个新行。

    在 GNU 下,可以编写 \n 并且 sed 将其解释为换行符。这在 BSD sed 下不起作用。因此版本不同。

关于sed oneliner 在另一行之前添加一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31151156/

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