我需要I/f
在文件中的某段行数范围内搜索模式,并在第一次匹配时退出。为此,我使用如下 sed 命令
sed -n '14922,28875{\|I/f|=}' file.txt
它实际上打印了第 14922 行到第 28875 行之间的所有出现情况,但我只想要第一次出现的情况。
我对此有一个替代解决方案,即通过管道传输输出并使用 head 命令。类似这样的操作
sed -n '14922,28875{\|I/f|=}' file.txt | head -n 1
它有效,但我想知道是否可以不使用 head 命令。我在互联网上搜索,发现我们使用q
字符,但不知何故我没有找到在命令中插入它的正确位置。有人能帮我吗
答案1
使用{=;q}
而不是=
:
sed -n '14922,28875{\|I/f|{=;q}}' file.txt
如果没有匹配,sed
将继续读取文件而没有机会产生任何输出。这不是最优的。处理完第 28875 行后退出:
sed -n '14922,28875{\|I/f|{=;q}};28875q' file.txt
请注意,在您的示例中head -n 1
,如果head
完成其工作并退出,则sed
只有当它尝试将第二行写入其标准输出时才会注意到这一点(比较这)。这意味着sed
将继续处理文件,直到找到第二个匹配项或直到最后。在这方面,它甚至比我的次优解决方案更糟糕q
。