tail -f /var/log/kern.log | sed 's/.* //'
给我终端上的输出但是当我这样做时
tail -f /var/log/kern.log | sed 's/.* //' >> logfile.txt
我在文件中找不到任何东西。我从内核模块打印可执行文件的名称。对于例如,如果我跑ls
,kern.log
有/bin/ls
但与时间戳等,所以我尝试上面只提取路径,只要我运行它,而不会重定向到一个输出文件它的作品,我也尝试过tee logfile.txt
。依然没有。请帮忙。
您的 sed 命令的问题在于您将“后面跟有空格的所有内容”(“.*”)替换为“无”。您需要做的是将所有内容抓取到第一个空间并保存,然后用保存的位替换所有内容。要保存输入字符串的一部分,请将正则表达式的那部分放在括号中:(.*)
然后可以使用\1
.
但还有更多。sed 是贪婪的——它会尽可能多地抓取。所以当你有一个像“abc def ghi”这样的字符串时,它会看到“abc def”后面跟着一个空格并抓住所有这些。所以问题是,你如何只得到第一部分,直到第一个空间?
您可以选择所有不是您的分隔符(空格)且后跟空格的字符。所以在上面的例子中,因为c和d之间的字符是一个空格,所以不会被选中,只有abc部分会被选中。
所以你最终得到的是这样的:
sed "s/\([^ ]*\) .*/\1/"`
其中匹配模式包括“任何不是空格的东西,只要有”(在括号中保存它)"([^ ]\*)"
,一个空格" "
,然后是其他任何东西".*"
。替换字符串"\1"
是“与第一组括号中的正则表达式部分匹配的任何内容”。
这是我做的一个快速测试:
Testing: cat testout.txt
cat: testout.txt: No such file or directory
Testing: cat testin.txt
abc def ghi
asdf jkl; fdsa ;lkj qwerty 123
Once upon a time
When in the course
Testing: cat testin.txt | sed "s/\([^ ]*\) .*/\1/" >> testout.txt
Testing: cat testout.txt
abc
asdf
Once
When
Testing: cat testin.txt | sed "s/\([^ ]*\) .*/\1/" >> testout.txt
Testing: cat testout.txt
abc
asdf
Once
When
abc
asdf
Once
When
Testing:
它从testout.txt 中的任何内容和testin.txt 中的4 行开始。然后它将testin.txt的内容发送到 sed,并将输出附加到一个文件中。然后它显示内容。然后我又做了一次,以表明它确实是附加的(现在testout.txt 中有 8 行,两组 4 行。)(注意:我添加了空行只是为了更容易阅读。)
请让我知道,如果你有任何问题。
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句