提取包含包含制表符的精确短语的行

提取包含包含制表符的精确短语的行

我有一个包含以下几行的文件

50[tab]H[tab]1
44[tab]H[tab]2
4[tab]H[tab]3
4[tab]H[tab]4
44[tab]H[tab]5
234[tab]H[tab]6

我只想将以确切短语“4[tab]H”开头的最后一行(因此这将是“4[tab]H[tab]4”)提取到另一个文件中。我努力了:

grep "^4*.H" filein.in | tail -1 >> fileout.out

但它提取“44[tab]H[tab]5”。我需要它来提取以确切的字符串开头的最后一行:“4[tab]H”。

答案1

在 ksh93/zsh/bash/mksh/FreeBSD sh 中:

grep $'^4\tH' filein.in | tail -n 1

或者在任何 shell 中:

awk '/^4\tH/ { line=$0; }; END { if(line!="") print line; }' filein.in

答案2

使用 gnu sed

sed '/^4\tH/h;$bA;N;D;:A;x;/^$/d' infile

答案3

您还可以使用 逐行反转输入文件tac,然后获取第一个匹配项

$ # add another \t after H if needed
$ tac ip.txt | grep -m1 $'^4\tH'
4   H   4

$ tac ip.txt | awk -F'\t' '$1=="4" && $2=="H"{print; exit}'
4   H   4

相关内容