繁体   English   中英

如何使用 awk 从目录中的多个文件的文件内容中查找包含字符串“abcd”的文件名

[英]how to find a file name that contains a string "abcd " in the file content from multiple files in the directory using awk

“bookrecords”目录有多个文件

bookrecords
           1.txt
           2.txt 
           3.txt .....

文件 2.txt 有内容

2.txt
    author: abcd
    title:  efg
    year: 1980

如何使用 author: 作为关键字获取文件名 2.txt

使用 awk 命令

我尝试使用 grep 命令,但我想使用 awk 命令

SearchRecord()
{


  name = abcd
  total=`cat $bookrecords | grep -cwi $name`
  record=`cat $bookrecords | grep -wi $name`

  menu
}

awk

$ awk -v search_string="$name" '$0~search_string{print FILENAME; exit}' bookrecords/*

但是,如果您不进行结构搜索,我认为grep会更好

$ grep -lF "$name" bookrecords/*

如果您在bookrecords下有较深的目录层次结构,则可以执行

grep -Elsrx '[[:space:]]*author:[[:space:]]*abcd[[:space:]]*' bookrecords

如果您只想查看bookrecords中的 *.txt 文件,请执行

grep -Elx '[[:space:]]*author:[[:space:]]*abcd[[:space:]]*' bookrecords/*.txt

-l只产生 output 中的文件名,而-x则注意正则表达式匹配整行。 因此,不会选择包含myauthor:abcde的行。 根据您的喜好调整正则表达式,并在用真实作者姓名替换abcd时要小心(它不应包含未转义的正则表达式字符,例如句点)。

如果您想以至少一个空格开始该行,并且在冒号后至少有一个空格:

grep -Elsrx '[[:space:]]+author:[[:space:]]+abcd[[:space:]]*' bookrecords

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM