grep从找到的单词开头到单词结尾

时间:2013-07-12 18:55:21

标签: grep

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

.MHuj.5.. /var/log/messages

文本和目录可能不时或系统与系统不同。我想做的就是能够将目录输出并将其发送到变量。

我环顾四周但却无法弄清楚如何在一个单词的末尾grep。我知道我可以开始搜索短语寻找“/”,但我不知道如何告诉grep在单词的结尾处停止,或者它是否会将下一个“/”视为新单词。列出的目录可能会更改,因此我不能假设每次都会列出相同数量的目录。在某些情况下,将列出多行,每个行的输出中都有一个目录列表。感谢您提供的任何帮助!

4 个答案:

答案 0 :(得分:1)

从一个例子中我们是否可以概括出这一点并不清楚。第一次出现斜杠标记了要提取的数据的开头。如果有,请尝试

grep -o '/.*' file

要获取最后一个空格后的所有内容,请尝试

grep -o '[^ ]*$' file

对于更高级的模式匹配和提取,可以查看sed,或者awk或Perl或Python。

答案 1 :(得分:1)

如果你的目录路径没有空格,那么你可以这样做:

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

答案 2 :(得分:0)

您的专栏可以描述为:

^\S+\s+(\S+)$

假设空格是随机文本和目录之间的分隔符。它只是将空白与非空白分开,并捕获第二部分。

或者您可能想要查看单词边界字符类:\b

答案 3 :(得分:0)

我知道你说要使用grep,但我不禁要提到这是使用awk完成的:

awk '{ print $NF }' input.txt

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

相关问题