我有一个包含以下几行的文件
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