【问题标题】:Using bash to find strings in text files where the case DOES NOT match使用 bash 在文本文件中查找大小写不匹配的字符串
【发布时间】:2013-03-11 13:26:28
【问题描述】:

我在~/script-filenames 中有一个包含数百个大小写混合文件名的列表,以及在当前目录中要搜索的数百个可能包含这些文件名的文本文件。

目前我正在使用以下 2 个命令:

  1. 不分大小写返回所有匹配项:

    xargs -0 -I @ -a ~/script-filenames grep -ri @
    
  2. 返回所有完全匹配:

    xargs -0 -I @ -a ~/script-filenames grep -r @
    

但是,当大小写被忽略时,我如何找到匹配的字符串,但在大小写准确时会失败?

也许有一种使用egrep和regexp的方法,但我不知道如何。

【问题讨论】:

  • grep -r @ 你想grep什么?什么都没有?
  • 不,xargs 将 @ 声明为输入文件中标记的替换变量。
  • 是的,那么您的命令类似于grep -r filename 对吗?模式在哪里?
  • 嗯,应该是,但看起来没有......
  • No grep -r mystring 在当前位置的所有文件中查找 mystring 并打印匹配的行。我做错的是使用 xargs 的 -0 选项而不是清理输入文件。 xargs -I 允许您声明一个替换变量以在 cmdline 的其他地方使用。我使用 @ 作为我的替换变量。

标签: string bash grep find


【解决方案1】:

解决您的问题的一个简单方法可能是使用 off diff:

xargs -0 -I @ -a ~/script-filenames grep -ri @ >hitList.IgnoredCase
xargs -0 -I @ -a ~/script-filenames grep -r @ >hitlist.WithCase

diff -u hitList.IgnoredCase hitlist.WithCase|grep ^+ |cut -c 2-

diff 行的输出将只包含大小写不准确的行。

【讨论】:

  • 感谢使用 diff 的想法,一旦我获得了可比较的数据,这些思路就会很有帮助。
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 2016-07-23
  • 2021-12-16
  • 1970-01-01
  • 2015-06-11
  • 2020-08-06
  • 1970-01-01
  • 2022-10-24
相关资源
最近更新 更多