grep从发现单词的开头到单词的结尾

grep从发现单词的开头到单词的结尾,grep,Grep,我正在尝试grep命令的输出,该命令输出未知文本和每行一个目录。下面是我的意思的一个例子: .MHuj.5.. /var/log/messages 文本和目录可能会因时间或系统而异。不过,我想做的就是能够将目录grep出来并将其发送到一个变量 我环顾了四周,但不知道如何用grep结束一个单词。我知道我可以开始搜索短语寻找“/”,但我不知道如何告诉GERP停止在这个词的末尾,或者如果它会考虑下一个“/”一个新词。列出的目录可能会更改,因此我不能假设每次列出的目录数量相同。在某些情况下,将列出多个

我正在尝试grep命令的输出,该命令输出未知文本和每行一个目录。下面是我的意思的一个例子:

.MHuj.5.. /var/log/messages
文本和目录可能会因时间或系统而异。不过,我想做的就是能够将目录grep出来并将其发送到一个变量


我环顾了四周,但不知道如何用grep结束一个单词。我知道我可以开始搜索短语寻找“/”,但我不知道如何告诉GERP停止在这个词的末尾,或者如果它会考虑下一个“/”一个新词。列出的目录可能会更改,因此我不能假设每次列出的目录数量相同。在某些情况下,将列出多个行,每个行的输出中将有一个目录列表。谢谢你能提供的任何帮助

您的线路可以描述为:

^\S+\s+(\S+)$
假设空白是随机文本和目录之间的分隔符。它只是将空白与非空白分开,并捕获第二部分


或者,您可能希望查看单词边界字符类:
\b

从单个示例来看,我们不清楚是否可以概括这一点,例如,斜杠的第一次出现标记了要提取的数据的开始。如果这样,试试看

grep -o '/.*' file
要在最后一个空格后提取所有内容,请尝试

grep -o '[^ ]*$' file

有关更高级的模式匹配和提取,请参阅
sed
,或Awk或Perl或Python。

我知道您说过要使用grep,但我不得不指出,这是使用Awk实现的:

awk '{ print $NF }' input.txt

这是假设空格是分隔符,并且路径不包含任何空格。

如果目录路径没有空格,则可以执行以下操作:

$ echo '.MHuj.5.. /var/log/messages' | awk '{print $NF}'
/var/log/messages

基本POSIX
grep
不支持这些Perl模式,但是如果您有
grep-P
,那么您就有了更多的功能。我尝试了这个,但没有成功。命令运行了,但没有输出。我通过管道将命令的输出传输到awk“{print$NF}”,它成功地找到了目录。不过,它还在输出中添加了一个新的空行。有没有一种方法可以在不向输出的底部追加新行的情况下获取awk命令的输出?谢谢@user2569472试试
awk'$NF~/\/{print$NF}'
@djf我想是14秒左右吧!!:)@JS웃 我的老英语老师会说:伟人所见略同;)