显示文件中的特定数据

显示文件中的特定数据

我希望能够从命令行搜索名称,它会显示出现在其下的字母 A、B、C、D、E、F 和名称,而不是中间的内容。因此,如果我搜索 tim,它应该显示:

B  
tim

文件如下:

A
bob

john

B
tom

tim

C
phil 
bob

D
gary
tony

E
anne
rachel

F
gareth

答案1

好吧,那再像这样:

awk "/^[A-Z]\$/{ l=\$1 ; } ; /^${NAME}\$/ { print l ; exit ; };"

缺点:涉及引用(我个人尽量避免)、正则表达式(难以理解)和 awk(难以理解)

优点:我思考这确实有效,至少就我所理解的而言是如此。

(不用说,您应该将 ${NAME} 替换为您要搜索的条目,例如 tim)


评论部分要求的解释:

/^[A-Z]\$/{ l=\$1 ; }

对于每行单个大写字母,将该行上的第一个(唯一)项目分配给变量 l(字母 ell)。

/^${NAME}\$/ { print l ; exit ; }

对于与 ${NAME} 匹配的每一行(您应该用您要查找的内容替换 ${NAME},如我上面所述,或者在运行命令之前设置并导出 NAME 环境变量),打印变量 l 的最新值,然后退出。实际上,程序在遇到与指定值完全匹配的行后立即退出,紧接着打印最近遇到的与第一个正则表达式匹配的行。

我引用了除用于 ${NAME} 的 $ 之外的所有 $,因为我使用了双引号而不是单引号(以允许 ${NAME} 扩展,但避免与其他 $ 混淆。

答案2

grep -B1 <searchstring> <filename>

例如

grep -B1 tim file

相关内容