2017-04-01 7 views
0
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を試してみます。まだ何も。助けてください。

答えて

0

あなたのsedコマンドの問題は、 "スペースが続くすべて"( "* *")を取って、それを "nothing"に置き換えることです。あなたがしなければならないことは、すべてを最初のスペースまで掴んで保存し、すべてを保存したビットで置き換えることです。入力文字列の一部を保存するには、正規表現のその部分をかっこで囲みます:(.*)これは\1を使用して置換文字列に入れられます。

しかし、それ以上のことがあります。 sedは欲張りです - できるだけ多くをつかみます。だから、 "abc def ghi"のような文字列があると、 "abc def"の後に空白があり、そのすべてをつかむことがわかります。だから質問は、最初の部分まで、最初の部分までどのように取得するのですか?

デリミタではない文字(スペース)の後ろに空白をすべて選択できます。したがって、上記の例では、の間の文字が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行あります)(注:読みやすくするために空白行を追加しました)

質問がある場合はお知らせください。

希望すると便利です。

+0

非常によく説明され、ありがとう! – GeorgeOfTAC

-1

申し訳ありませんが、コンテンツをファイルに入れるのは1つだけではありません。

+0

">>"は**コンテンツをファイルに追加します** –

+0

すごい!申し訳ありません:D – mprandot

+0

OPは、 '' ''を使用してlogfile.txtにリダイレクトしても機能しません。リダイレクトコマンド '>'も動作しません。それが末尾になると、ログを上書きします。最高は '' 'を使用することです。' ' – LethalProgrammer

関連する問題