Rya*_*ard 4 regex bash awk grep sed
假设我有一个包含数百万行的文件,组织如下:
@1:N:0:ABC
XYZ
@1:N:0:ABC
ABC
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一行grep/sed/awk匹配函数,如果NCCGGAGA在第二行找到第一行的行,则返回两行.
当我尝试使用grep -A1 -P匹配匹配的比赛时'(?<=:)[A-Z]{3}',我卡住了.我觉得我的创造力让我失望了.
同 awk
$ awk -F: 'NF==1 && $0 ~ s{print p ORS $0} {s=$NF; p=$0}' ip.txt
@1:N:0:ABC
ABC
Run Code Online (Sandbox Code Playgroud)
-F:使用:作为分隔符,可以很容易地得到最后一列s=$NF; p=$0 保存最后一列值和整行以便稍后打印NF==1 如果行不包含 :$0 ~ s 如果line包含先前保存的最后一列数据
index($0,s)  字面搜索:后跟没有的行:
使用GNU sed(可能也适用于其他版本,但语法可能会有所不同)
$ sed -nE '/:/{N; /.*:(.*)\n.*\1/p}' ip.txt
@1:N:0:ABC
ABC
Run Code Online (Sandbox Code Playgroud)
/:/ 如果行包含 :N 在模式空间中添加下一行/.*:(.*)\n.*\1/最后捕获字符串:并检查它是否存在于下一行再次,这假设输入如所示的..这不适用于像这样的情况
@1:N:0:ABC
@1:N:0:XYZ
XYZ
Run Code Online (Sandbox Code Playgroud)