linux - 如何从匹配字符串打印文件直到 EOF

标签 linux bash awk sed solaris

以下命令打印文件直到匹配WORD

 awk '1;/WORD/{exit}' file

但是如何打印文件从字符串 WORD 到文件末尾不包括字符串 WORD?

最佳答案

正如 Etan Reisner 在评论中所说,this answer 中有一本很好的范围模式食谱.但从模式到文件末尾的最简单匹配方法是:

awk '/WORD/,0' file  

为了从包含模式的行之后的行打印,我们可以改为这样做:

awk 'found,0;/WORD/{found=1}' file

要在 WORD 之后也打印第一行匹配 WORD 的部分,只需要修改最后一个 Action ,但是用显式调用 match 替换正则表达式很方便设置 RSTART 和 RLENGTH 的顺序:

awk 'found,0;match($0,/WORD/){found=1;print substr($0, RSTART+RLENGTH}'

范围模式有表达式,表达式的形式,意思是从匹配第一个表达式的第一行开始匹配到匹配最后一个表达式的第一行,包括在内。重复该范围,直到文件被完全处理。

在这些示例中,第二个表达式的计算结果始终为 0(假),因此范围永远不会终止,一旦模式成功,所有行都会匹配。

类似地,另一种解决“打印所有行直到一个模式”的方法如下,尽管它读取整个文件效率较低:

awk 'NR==1,/WORD/' file

此外,如果目标是只打印模式实例(而不是包含模式的完整行,我们可以对原始程序进行简单修改:

awk 'match($0, /WORD/){print(sub($0,1,RSTART+RLENGTH)); exit}1'

关于linux - 如何从匹配字符串打印文件直到 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29082229/

相关文章:

c - 在极少数情况下,UDP 传输数据包在 Linux 嵌入式设备(GigE Vision 相机)上丢失

linux - 无法使用 Bash 脚本连接到 POP3 服务器

bash - 如何在 bash heredocs 中抑制变量替换

linux - 在 awk 中删除指定符号后的部分字符串

c - 数组值改写

linux - 在 Linux 上的 IDE 下没有声音(在 Jar 中正常)

AWK 脚本忽略第一行

python - 基于AWK创建反向补码序列

linux - 启用上拉 GPIO

swift - 在 Swift 5 中正确执行 shell 命令