这可能是许多常见问题解答 - 而不是使用:
cat file | command
Run Code Online (Sandbox Code Playgroud)
(这被称为无用的猫),正确的方式应该是:
command < file
Run Code Online (Sandbox Code Playgroud)
在第二,"正确"的方式 - 操作系统不必产生额外的过程.
尽管知道这一点,我继续使用无用的猫有两个原因.
更美观 - 我喜欢数据仅从左到右均匀移动.而且它更容易更换cat别的东西(gzcat,echo,...),添加第二个文件或插入新的过滤器(pv,mbuffer,grep...).
我"觉得"在某些情况下可能会更快.更快,因为有2个进程,1st(cat)执行读取而第二个执行任何操作.它们可以并行运行,这意味着有时可以更快地执行.
我的逻辑是否正确(第二个原因)?
有没有人知道从linux控制台执行快速模糊搜索的方法?
当我需要在项目中找到文件但我不记得确切的文件名时,我常常遇到这种情况.在Sublime文本编辑器中,我将按Ctrl-P并键入名称的一部分,这将生成可供选择的文件列表.这是一个让我很满意的惊人功能.问题是在大多数情况下我必须通过ssh浏览远程机器上的控制台中的代码.所以我想知道是否有一个类似于Linux控制台的"Go Anywhere"功能的工具?
我正在寻找一种使用正则表达式进行模糊匹配的方法.我想使用Perl,但是如果有人可以推荐任何方式来做这个会有所帮助.
作为一个例子,我想匹配一个字母"纽约",前面加一个2位数.之所以遇到困难是因为文本是来自PDF的OCR,所以我想进行模糊匹配.我想要匹配:
12 New York
24 Hew York
33 New Yobk
Run Code Online (Sandbox Code Playgroud)
和其他"近距离"比赛(在Levenshtein距离意义上),但不是:
aa New York
11 Detroit
Run Code Online (Sandbox Code Playgroud)
显然,我需要指定匹配的允许距离("模糊").
据我了解,我不能使用String::ApproxPerl模块来执行此操作,因为我需要在匹配中包含正则表达式(以匹配前面的数字).
另外,我应该注意到这是我真正想要匹配的一个非常简单的例子,所以我不是在寻找一种蛮力的方法.
编辑添加:
好的,我的第一个例子太简单了.我并不是说人们会挂在前面的数字上 - 抱歉这个坏例子.这是一个更好的例子.考虑这个字符串:
ASSIGNOR, BY MESHS ASSIGN1IBNTS, TO ALUSCHALME&S MANOTAC/rURINGCOMPANY, A COBPOBATlOH OF DELAY/ABE.
这实际上是说:
ASSIGNOR, BY MESNE ASSIGNMENTS, TO ALLIS-CHALMERS MANUFACTURING COMPANY, A CORPORATION OF DELAWARE
我需要做的是提取短语"ALUSCHALME&S MANOTAC/rURINGCOMPANY"和"DELAY/ABE".(我意识到这可能看起来像疯了.但我是一个乐观主义者.)一般来说,模式看起来像这样:
/Assignor(, by mesne assignments,)? to (company name), a corporation of (state)/i
匹配是模糊的.
以下代码用作最小示例。它在文本中搜索一个不匹配的正则表达式(后来是一个大的 DNA 文件)。
awk 'BEGIN{print match("CTGGGTCATTAAATCGTTAGC...", /.ATC|A.TC|AA.C|AAT./)}'
Run Code Online (Sandbox Code Playgroud)
后来我对找到正则表达式的位置感兴趣。因此 awk 命令更复杂。就像这里解决了一样
如果我想搜索更多的不匹配和更长的字符串,我会想出很长的正则表达式:
example: "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" with 3 mismatches "." allowed:
/
...AAAAAAAAAAAAAAAAAAAAAAAAAAA|
..A.AAAAAAAAAAAAAAAAAAAAAAAAAA|
..AA.AAAAAAAAAAAAAAAAAAAAAAAAA|
-
- and so on. (actually 4060 possibilities)
/
Run Code Online (Sandbox Code Playgroud)
我的解决方案的问题是:
我的问题是: