首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cat返回错误:没有这样的文件或目录

使用cat返回错误:没有这样的文件或目录
EN

Stack Overflow用户
提问于 2020-02-17 16:48:25
回答 3查看 790关注 0票数 0

我在练巴什舞。当我尝试这个命令时,我会得到一个错误:"grep: where: No这类文件或目录“。

代码语言:javascript
复制
cat file2.txt | tr " " "\n" | grep –i where | wc -l
代码语言:javascript
复制
Content of file2.txt = 1 2 3 4 where 5 where 7 where
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-17 17:00:31

你的命令没什么问题。而且它应该按原样工作。也许你拷贝,粘贴了一些看不见的字符,把它搞砸了。复制粘贴下面的命令,然后通过更改实际值再试一次。

代码语言:javascript
复制
cat script.sh | tr ' ' '\n' | grep -i echo | wc -l

如果有用的话请告诉我。

票数 3
EN

Stack Overflow用户

发布于 2020-02-17 17:06:27

为什么错误信息

如果您将问题中的命令复制到Unicode解释器中并使用UTF-8进行分析,那么i之前的i是一个en dash U+2013,而不是连字符减号- (U+002D)。这意味着grep–i视为要搜索的模式,将where视为要搜索的文件,而该文件并不存在--正如错误消息所述。

代码语言:javascript
复制
$ 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,您可以只使用两个命令:

代码语言:javascript
复制
$ grep -iow where file2.txt | wc -l

不能将其简化为一个命令;使用grep -ciow where file2.txt生成1,而不是3(因为只有一个输入行匹配)。

对于非GNU grep,您可能需要使用:

代码语言:javascript
复制
$ tr ' ' '\n' < file2.txt | grep -ic where

cat

票数 6
EN

Stack Overflow用户

发布于 2020-02-17 17:45:50

多种方式:

用GNU grep

代码语言:javascript
复制
grep -oiw echo script.sh | wc -l
  • -o:只匹配输出。
  • -i:不区分大小写的匹配。
  • -w:整个单词匹配。
  • wc -l:数火柴。

使用sed将命令拆分为一行:

代码语言:javascript
复制
sed 's/[[:space:][:punct:]]\+/\n/g' script.sh | grep -ciF echo
  • sed 's/[[:space:][:punct:]]\+/\n/g':用换行符替换所有空格、回车、制表符、标点符号。
  • grep -ciF echo:使用不区分大小写的纯文本echo (无RegEx)匹配的计数行。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60267032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档