![正则表达式仅选择包含两个搜索词的行?](https://linux22.com/image/1485076/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%BB%85%E9%80%89%E6%8B%A9%E5%8C%85%E5%90%AB%E4%B8%A4%E4%B8%AA%E6%90%9C%E7%B4%A2%E8%AF%8D%E7%9A%84%E8%A1%8C%EF%BC%9F.png)
我对正则表达式不是很熟悉,所以我不知道该怎么做。假设我有一个包含 1000 多行数据的文本文件。我想搜索单词“command”和“find”。它们出现在整个文档的许多地方,但只有在第 100 行才出现在同一行,例如:The linux command to search files and folders is find.
假设我不知道这两个词的顺序,也不知道它们在行内的位置。
是否可以使用正则表达式在搜索“命令”和“查找”时直接选择这一行,而忽略这些词只出现一次的其他行?
答案1
尝试在 Sublime text 中尝试^.*(command|find).*$
(就像我在 Windows 10 上的 ST3 中尝试过的那样)。
我的答案是基于回答在堆栈溢出中。
编辑:上面的 RE 允许“command”或“find”,而不是同时使用两者。另一方面,它允许结果中包含“commander”、“finding”或“viewfinder”等不必要的表达。
(\<command\>.*\<find\>)|(\<find\>.*\<command\>)
消除了这些错误命中。请注意 \< 和 > 序列,它们表示单词的开头和结尾。
答案2
在 中vim
,您可以使用.*\<command\>\&.*\<find\>
。正如 Gombai Sándor 所指出的,\<…\>
分隔单词,因此,如果您只想搜索字符串“command” 和 “find” (即使它们作为较长单词的一部分出现,例如“commander”)你可以省略\<
and \>
。
注意:这有一个小缺点,就是它会将光标留在行首(包含两个单词),而不是留在所搜索的单词本身上(除非它出现在行首)。
答案3
寻找:
^.*(?i-s)(COMMAND).*?(FIND).*$|(?2).*?(?1)
或者:
(?i-s)^.*\W(COMMAND\W.*\WFIND|FIND\W.*\WCOMMAND)\W.*\R