【问题标题】:Finding words which match regex in multiple text files在多个文本文件中查找与正则表达式匹配的单词
【发布时间】:2014-07-05 00:40:00
【问题描述】:

所以,我是从命令行操作数据的新手,也是正则表达式的初学者。

我在多个子目录中有多个 .txt 文件。我想要做的是找到所有具有一定数量连续辅音的单词。

到目前为止我尝试过的是这样的:

  find . | grep -orhn '[bdfghjklmnprstvxzþ]\{2\}' > ../words.txt

只打印出类似的东西:

  2:rt
  2:gr
  2:xl
  3:gr
  3:st
  3:kk

我想得到整个单词,而不仅仅是两个连续的辅音(以及数字和冒号。我不知道它是从哪里来的,因为它不在原始数据中,但它真的不重要)我正在尝试)。

你有小费吗?

【问题讨论】:

  • 因为字符类它只匹配两个字符。为什么在字符课后面加{2}
  • 试试grep -rP "bdfghjklmnprstvxzþ" *
  • 因为我试图找到所有带有两个连续辅音的单词。如果我删除它,我会得到所有文件中的所有辅音,但如果我将它更改为 {3},我会在这个特定目录(和子目录)的所有文件中得到所有辅音的三元组。我只是不明白整个词,这就是我想做的。如果 {2} 意味着它只会输出这对,而不是别的,我将不得不找到另一种方法来做到这一点。有什么想法吗?我尝试了 Perl 正则表达式。我也不会这样做。
  • 我忘了提到,如果我删除 -o 标志,命令会输出整行或整个文件(此时不确定),其中包括具有 2 个连续辅音的单词。
  • 是的,没有 -o 标志,它会打印整行。你弄明白了吗?

标签: regex text terminal command-line-arguments


【解决方案1】:

-n 选项是文本中的行号。

我的建议是尝试匹配前后的单词字符。

这是我尝试过的并且似乎有效。

grep -orh  '\w\+[bdfghjklmnprstvxzþ]\{2\}\w\+' 

-o 选项只会显示匹配的内容,即整个单词。 鉴于 find 正在为您执行递归, -r 将看起来是递归的。

【讨论】:

  • 就是这样!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
  • 1970-01-01
  • 2020-03-05
  • 1970-01-01
相关资源
最近更新 更多