我正在尝试grep输出未知文本和每行目录的命令的输出。以下是我的意思的一个例子:
.MHuj.5.. /var/log/messages
文本和目录可能不时或系统与系统不同。我想做的就是能够将目录输出并将其发送到变量。
我环顾四周但却无法弄清楚如何在一个单词的末尾grep。我知道我可以开始搜索短语寻找“/”,但我不知道如何告诉grep在单词的结尾处停止,或者它是否会将下一个“/”视为新单词。列出的目录可能会更改,因此我不能假设每次都会列出相同数量的目录。在某些情况下,将列出多行,每个行的输出中都有一个目录列表。感谢您提供的任何帮助!
答案 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
这假设空格是分隔符,并且路径不包含任何空格。