我想知道如何使用Bash,我可以显示文件夹中所有文件的名称,在文本中有他们的名字?例如,file.txt在其内容中具有名称“Lorem ipsum dolor sit amet,fileconsectetur adipiscing elit.”,而文件file2.txt:[谚]一个人痛苦,一个人死亡,一个人死亡。没有单词“file2”,因此将跳过它我知道我应该使用“grep”,但我不确定在这种情况下如何使用它
uidvcgyl1#
您没有指出您是否关心文件名的匹配是否是不同文件名的子字符串。假设您不关心这个问题,那么通过使用awk可以简化解决方案,它可能如下所示(* 正如您所看到的,我在脚本中构建了测试数据 *):
# !/bin/sh Fname="junk_38.input" cat >"${Fname}" <<-!EnDoFfIlE make my day! 123 how are you? ${Fname} yabadabadoo! abc let the force be with you! !EnDoFfIlE ls -l "${Fname}" awk -v fName="${Fname}" 'BEGIN{ hit=0 ; }{ if( index( $0, fName ) > 0 ){ hit=1 ; exit ; } ; }END{ if( hit == 1 ){ printf("MATCH: %s [%s]\n", fName,NR ) ; }else{ printf("NO_MATCH: %s [%s]\n", fName, NR ) ; } ; }' <"${Fname}"
此解决方案会提供找到相符项目的行号,并在遇到第一个执行严修时结束。它也会报告未找到相符项目之档案的检查行数(相当于wc -l)。
1条答案
按热度按时间uidvcgyl1#
您没有指出您是否关心文件名的匹配是否是不同文件名的子字符串。
假设您不关心这个问题,那么通过使用awk可以简化解决方案,它可能如下所示(* 正如您所看到的,我在脚本中构建了测试数据 *):
此解决方案会提供找到相符项目的行号,并在遇到第一个执行严修时结束。它也会报告未找到相符项目之档案的检查行数(相当于wc -l)。