【问题标题】:How to search for a string in files with name containing a specific string in linux?如何在linux中搜索名称包含特定字符串的文件中的字符串?
【发布时间】:2012-12-05 12:19:23
【问题描述】:

我想在名称中包含“20121218”的文件中递归搜索“MY:STRING”字符串,输出应该给我文件名和位置。搜索也应该在子目录下的文件中查找。

【问题讨论】:

标签: linux string file search


【解决方案1】:

使用findgrep

find . -type f -name '*20121218*' -exec fgrep -l "MY:STRING" {} \;

解释:

find 命令查找。

.开始查找当前目录。

-type f 只对文件感兴趣。

-name 文件名匹配 '*20121218*'

-exec对找到的文件执行以下命令。

fgrep 固定字符串 grep。

-l 仅打印包含匹配项的文件名。

{} 来自find 命令的匹配文件列表。

\; 分隔符。

编辑:

$ find . -type f -mtime -18

【讨论】:

  • 谢谢。这是网站有天使。我喜欢它。
  • 如果我想在创建日期在 12 月 1 日之后的文件中搜索字符串怎么办?在这个搜索中,我不关心文件名。
【解决方案2】:

如下所示使用递归grep。不需要find

grep -Flr --include="*20121218*" "MY:STRING" /path/to/dir

由于您正在搜索固定字符串而不是正则表达式,因此请使用 -F 选项加快速度。

【讨论】:

  • 如果我想对创建日期在 12 月 1 日之后的文件中的字符串进行相同的搜索怎么办?在这个搜索中,我不关心文件名。
  • 您需要使用findmtime 选项。
  • find 是否有类似的加速选项?
【解决方案3】:

我更喜欢使用:

找到 . -type f (-name '20121218') -print0 | xargs -0 grep --color -n MYSTRING

...它将向您显示 MYSTRING 位于包含 20121218 的文件中的所有位置的文件路径、名称和行号(带颜色)。

前。来自我的 Android 内核来源:

找到 . -type f (-name 'config') -print0 | xargs -0 grep --color -n MSM8974

返回很多,但这里有一些:

./arch/arm/mach-msm/Kconfig:254:config ARCH_MSM8974

./arch/arm/mach-msm/Kconfig:255: bool "MSM8974"

./arch/arm/configs/g2-kddi-perf_defconfig:41:CONFIG_ARCH_MSM8974=y

./arch/arm/configs/g2-kddi-perf_defconfig:44:CONFIG_MACH_MSM8974_G2_KDDI=y

./arch/arm/configs/lgl22_defconfig:314:CONFIG_ARCH_MSM8974=y

./arch/arm/configs/g2-open_com-perf_defconfig:503:CONFIG_MACH_MSM8974_A1=y

./arch/arm/configs/g2-open_com-perf_defconfig:516:CONFIG_SND_SOC_MSM8974=y

【讨论】:

  • 如果你想同时搜索大小写字符串,当然可以使用 -iname 而不是 -name。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多