如何在考虑连字符的情况下 grep 查找单词?

如何在考虑连字符的情况下 grep 查找单词?

为了建立索引,我正在一堆latex文件中搜索一些单词。这个过程由于latex有一个任意的连字符命令而变得复杂\-,该命令指示latex它可以在哪些位置断词。我想将其纳入我的搜索中,但到目前为止我还没有成功。例如,我需要一个匹配所有的表达式

  • pādapracāra
  • pāda\-pracāra
  • pā\-da\-pra\-cā\-ra

或同一单词的不同连字符实例。

我知道为了匹配乳胶命令开头的反斜杠,必须输入四个反斜杠,例如$ grep \\\\mycommand*tex`。

vim我可以通过 搜索这样的表达式/pā\(\\-\)*da\(\\-\)*pra\(\\-\)*cāra,所以我认为在 grep 中它会是类似的东西grep pā\(\\\\-\)\?da *tex(依此类推,但这个已经不匹配任何东西)。

答案1

我不认为你可以指示“grep”忽略连字符。

首先通过“sed”过滤它怎么样:

echo 'pa\\-da\\-pra\\-ca\\-bra' | sed -e s'/\\-//g'

并且您可以使用另一个表达式进行模式匹配(如用户所建议的那样CAS):

echo 'pa\\-da\\-pra\\-ca\\-bra' | sed -n -e s'/\\-//g' -e '/pada/p'

答案2

$ grep -Ei 'pā(\\-)?da(\\-)?pra(\\-)?cā(\\-)?ra' *tex做我需要的。

答案3

通过 bash 编辑 LaTeX' 文档不是正确的方法,但如果您愿意,这里是

grep -Ee "$(echo "padapracara" | sed "s/\B/(\\\\\\\\-)?/g")"

相关内容