我在练巴什舞。当我尝试这个命令时,我会得到一个错误:"grep: where: No这类文件或目录“。
cat file2.txt | tr " " "\n" | grep –i where | wc -lContent of file2.txt = 1 2 3 4 where 5 where 7 where发布于 2020-02-17 17:00:31
你的命令没什么问题。而且它应该按原样工作。也许你拷贝,粘贴了一些看不见的字符,把它搞砸了。复制粘贴下面的命令,然后通过更改实际值再试一次。
cat script.sh | tr ' ' '\n' | grep -i echo | wc -l如果有用的话请告诉我。
发布于 2020-02-17 17:06:27
为什么错误信息
如果您将问题中的命令复制到Unicode解释器中并使用UTF-8进行分析,那么i之前的i是一个en dash U+2013,而不是连字符减号- (U+002D)。这意味着grep将–i视为要搜索的模式,将where视为要搜索的文件,而该文件并不存在--正如错误消息所述。
$ echo "grep –i where | wc -l" | utf8-unicode -w 3
0x67 = U+0067
0x72 = U+0072
0x65 = U+0065
0x70 = U+0070
0x20 = U+0020
0xE2 0x80 0x93 = U+2013
0x69 = U+0069
0x20 = U+0020
0x77 = U+0077
0x68 = U+0068
0x65 = U+0065
0x72 = U+0072
0x65 = U+0065
0x20 = U+0020
0x7C = U+007C
0x20 = U+0020
0x77 = U+0077
0x63 = U+0063
0x20 = U+0020
0x2D = U+002D
0x6C = U+006C
$utf8-unicode的代码现在可在SOQ (堆栈溢出问题)存储库中GitHub上作为文件utf8-unicode-1.11.tgz在套餐子目录中使用。这是当前版本-- utf8-unicode -V reports、utf8-unicode: UTF8-UNICODE Version 1.11 (2017-06-12 06:22:15)和utf8-unicode -h给出了帮助。使用-w 3意味着为每个代码点留出足够的空间,使其宽为3字节,从而产生更多的柱状输出(默认为-w 1)。
其他改进
在上面的分析中,我没有讨论如何更广泛地改进脚本。如果您有一个足够现代的GNU grep,您可以只使用两个命令:
$ grep -iow where file2.txt | wc -l不能将其简化为一个命令;使用grep -ciow where file2.txt生成1,而不是3(因为只有一个输入行匹配)。
对于非GNU grep,您可能需要使用:
$ tr ' ' '\n' < file2.txt | grep -ic wherecat。
发布于 2020-02-17 17:45:50
多种方式:
用GNU grep
grep -oiw echo script.sh | wc -l-o:只匹配输出。-i:不区分大小写的匹配。-w:整个单词匹配。wc -l:数火柴。使用sed将命令拆分为一行:
sed 's/[[:space:][:punct:]]\+/\n/g' script.sh | grep -ciF echosed 's/[[:space:][:punct:]]\+/\n/g':用换行符替换所有空格、回车、制表符、标点符号。grep -ciF echo:使用不区分大小写的纯文本echo (无RegEx)匹配的计数行。https://stackoverflow.com/questions/60267032
复制相似问题