如果我尝试将grep的输出重定向到它正在读取的同一文件,如下所示:$grepstufffile.txt>file.txt我收到错误消息grep:inputfile'file.txt'isalsotheoutput。grep如何确定这一点? 最佳答案 根据GNUgrep源代码,grep检查输入和输出的i-nodes:if(!out_quiet&&list_files==0&&1通过针对STDOUT_FILENO调用fstat来填充out_stat。if(fstat(STDOUT_FILENO,&tmp_stat)==0&&S_ISRE
我正在尝试实现一个脚本来等待日志文件中的特定消息。记录消息后,我想继续脚本。这是我使用tail-f和grep-q进行的尝试:#tail-flogfile|grep-q'Messagetocontinue'grep永远不会退出,因此即使在文件中记录了“继续消息”,它也会永远等待。当我在没有-f的情况下运行它时,它似乎工作正常。 最佳答案 tail-f将读取文件并显示稍后添加的行,它不会终止(除非发送像SIGTERM的信号)。grep不是这里的阻塞部分,tail-f是。grep将从管道中读取数据直到它关闭,但它永远不会是因为tail-f
假设我们的文件夹结构如下所示:/app/app/data.../app/secondary/app/secondary/data我想递归搜索/app/data,但我不想搜索/app/secondary/data。在app文件夹中,我的grep命令会是什么样子? 最佳答案 这样就可以了grep-r--exclude-dir='secondary/data'PATTERNdata 关于linux-Grep:使用排除特定文件夹,我们在StackOverflow上找到一个类似的问题:
这个问题在这里已经有了答案:Addblanklineaftereveryresultingrep(7个答案)关闭6年前。你知道如何添加一些结束行吗"=========================================================================================="每场比赛结束后tail-ferror.log-n2000|grep-B10-A25'Exception:'此命令打印所有异常日志,但我喜欢为每个异常日志看到一个分隔线。
作为一个非英语母语的人,与其他API相比,我很难记住Linux命令。在Linux中,函数名称似乎并不表明它们的用途。为什么选择名称fork()来创建子进程?在字典中,fork的意思是“有两个或多个fork的器具”,这与创建新进程无关。为什么选择名称grep来“打印与模式匹配的行”?grep是否表示“g报告”?我在哪里可以找到LinuxAPI中其他命令背后的词源? 最佳答案 Fork可以表示一分为二,如道路(source)。Fork(15):todivideintobranches.Grep'setymology:Fromanidio
如何从Linux命令行中grep文件中以双正斜杠开头的行?双正斜杠前面可以有空格,但前面只有空格,没有其他类型的字符。例如shell_prompt:lsshell_prompt:grep.....?file_name对不起,我没注意,我没有注意到//除了空格之外的字符之前存在的东西。问题解决了。将奖励给第一个回答的人。 最佳答案 使用正则表达式:grep-E'^*//' 关于regex-如何在Linux命令行中grep以双正斜杠开头的行?,我们在StackOverflow上找到一个类似的
我想从grep中排除"*log*"和./tags。我做的是:grep-rI"PatternToSearch"./path--exclude="*log*"或者这个:grep-rI"PatternToSearch"./path--exclude="tags"是否可以在一个grep中合并两个排除模式? 最佳答案 尝试以下:grep-rI"PatternToSearch"./path--exclude={*log*,tags}只需使用“,”来分隔模式。似乎与howdoIusethegrep--includeoptionformultipl
find.-name"*.php"|xargsgrep-i-n"searchstring">output.txt在这里,我试图将数据写入一个文件,但这并没有发生...... 最佳答案 如何使用>>>附加结果?find.-name"*.php"|xargsgrep-i-n"searchstring">>output.txt我现在没有Linux机器,所以我会尝试即兴发挥。xargsgrep-i-n"searchstring"让我有点困扰。也许您的意思是xargs-I{}grep-i"searchstring"{},或者只是xargsgr
如何使用grep删除单词的开头?例如,我有一个包含以下内容的文件:www.abc.com我只需要这部分:abc.com抱歉这个基本问题,但我没有使用Linux的经验。 最佳答案 您不能在Unixshell中使用grep编辑字符串,grep通常用于查找或删除文本中的某些行。您宁愿使用sed代替:$echowww.example.com|sed's/^[^\.]\+\.//'example.com你需要学习正则表达式touseiteffectively.sed也可以就地编辑文件(修改文件),如果你传递-i参数,但要小心,如果你写错了se
这个问题在这里已经有了答案:grepoutputtoshowonlymatchingfile(4个答案)关闭6年前。我试图找到包含特定模式的文件,所以我使用grep-ir'pattern'.来搜索当前目录下的所有文件。但是我不想看到每个文件的内容,我只需要路径/文件名。我该怎么做?Ps:因为有些JSON文件在一行中包含很长的文本,那么它会占据整个屏幕。我不想过滤掉那些JSON文件,因为这就是我要查找的内容