1

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

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

文本和目录可能因时间或系统而异。我想做的只是能够将目录grep出来并将其发送到一个变量。

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

4

4 回答 4

1

从单个示例中我们是否可以概括,例如第一次出现的斜线标记您要提取的数据的开始并不清楚。如果成立,请尝试

grep -o '/.*' file

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

grep -o '[^ ]*$' file

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

于 2013-07-12T19:14:53.017 回答
1

如果您的目录路径没有空格,那么您可以执行以下操作:

$ echo '.MHuj.5.. /var/log/messages' | awk '{print $NF}'
/var/log/messages
于 2013-07-12T19:19:52.800 回答
0

您的线路可以描述为:

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

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

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

于 2013-07-12T19:03:20.747 回答
0

我知道你说过要使用 grep,但我不得不提一下,这是使用 awk 轻松完成的:

awk '{ print $NF }' input.txt

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

于 2013-07-12T19:19:37.687 回答