int [] arr = {2,4,1,6,5,9,0,7};
Arrays.sort(arr);
System.out.println(arr[arr.length - 2]);
给我终端输出但是当我做
时tail -f /var/log/kern.log | sed 's/.* //'
我无法在文件中找到任何内容。从内核模块中,我打印可执行文件的名称。例如,如果我运行 tail -f /var/log/kern.log | sed 's/.* //' >> logfile.txt
,ls
有kern.log
但有时间戳等等。所以我尝试上面只提取路径,只要我运行它而不重定向到输出文件,我也试过/bin/ls
。依然没有。请帮忙。
答案 0 :(得分:0)
你的sed命令的问题在于你正在使用“空格后面的所有内容”(“。*”)并将其替换为“nothing”。您需要做的是将所有内容抓到第一个空间并保存,然后用保存的位替换所有内容。要保存部分输入字符串,请将正则表达式的那部分放在括号中:(.*)
然后可以使用\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.)(注意:我添加了空行只是为了让它更容易读出。)
如果您有任何疑问,请与我们联系。
希望这有帮助!
答案 1 :(得分:-1)
抱歉,但并非只有一个">"将内容放入文件?