gpt4 book ai didi

bash - 如何在 bash 中发生匹配之前忽略所有行?

转载 作者:行者123 更新时间:2023-11-29 08:46:02 25 4
gpt4 key购买 nike

我想忽略 bash 中匹配之前出现的所有行(也忽略匹配的行。输入示例可以是

R1-01.sql
R1-02.sql
R1-03.sql
R1-04.sql
R2-01.sql
R2-02.sql
R2-03.sql

如果我匹配R2-01.sql在这个已经排序的输入中,我想得到

R2-02.sql
R2-03.sql

最佳答案

多种方式。例如:假设你的输入在list.txt中

PATTERN="R2-01.sql"
sed "0,/$PATTERN/d" <list.txt

因为 0,/pattern/ 仅适用于 GNU sed,(例如,不适用于 OS X),这里是一个篡改的解决方案。 ;)

PATTERN="R2-01.sql"
(echo "dummy-line-to-the-start" ; cat - ) < list.txt | sed "1,/$PATTERN/d"

这将在开头添加一个虚拟行,因此真正的模式必须在第 1 行或更高行上,因此 1,/pattern/ 将起作用 - 从第 1 行删除所有内容 (虚拟一)到模式。

或者您可以在模式后打印行并删除第一行,例如:

sed -n '/pattern/,$p' < list.txt | sed '1d'

使用 awk,例如:

awk '/pattern/,0{if (!/pattern/)print}' < list.txt

或者,我最喜欢使用下一个 perl 命令:

perl -ne 'print unless 1../pattern/' < list.txt

当模式在第一行时删除第一行...

另一种解决方案是reverse-delete-reverse

tail -r < list.txt | sed '/pattern/,$d' | tail -r

如果您有 tac 命令,请使用它代替 tail -r 有趣的是 /pattern/,$d' 在最后一个工作行,但 1,/pattern/d` 不在第一行。

关于bash - 如何在 bash 中发生匹配之前忽略所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5935742/

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