コマンドラインに印刷された行の間に改行を追加するにはどうすればよいですか?


30

メールログは非常に読みにくいです。コマンドラインに印刷された各行の間に空白行を出力するにはどうすればよいですか?たとえば、ログをgrepしているとします。そうすれば、複数のラップされた行が混同されることはありません。

回答:


52
sed G 
# option: g G    Copy/append hold space to pattern space.

Gはあまり使用されませんが、この目的には適しています。sedは、「パターンスペース」と「ホールドスペース」の2つのバッファスペースを維持します。処理される行のsedは、様々なコマンドが(その内容で動作するように、通常、パターン空間を通って流れs///pなど)。ホールドスペースは空で始まり、一部のコマンドでのみ使用されます。

このGコマンドは、改行とホールドスペースの内容をパターンスペースに追加します。上記のsedプログラムは、ホールドスペースに何も配置しないため、G処理されるすべての行に改行だけを効果的に追加します。


3
-eは必要ありません。配管whatever | sed Gはトリックを行う必要があります。
狂気

@frabjous:そうですね-e、単一のコマンド引数しか必要ないので、そのままにしておくこともできます。
クリスジョンセン

+2をあげてもいいですか?釘付け!
クリスチャンボンジョルノ

ただし、stdoutにのみ表示されますが、保存はされません。
-biolinh

8

awkを使用して、改行を追加します。これにより、不要なものを除外することもできます。

awk '{print $0,"\n"}' | less

4

sedを使用して、行全体と1つの追加の改行文字を置き換えます。

grep foo /var/log/maillog | sed -e "s/^.*$/&1\n/"

4
@Chris Johnsenの「G」コマンドはさらに単純ですが、sedの置換はやや単純な「s / $ / \ n /」になります。
カム

3

これはあなたが望んでいることですか?

grep SPAM mail.log | while read -r line; do echo; echo $line; done


おそらくread -r、バックスラッシュ文字を特別なものとして扱うことを避けるために使用したいと思うでしょう。
クリスジョンセン

0

見ているだけではない場合は、テキストファイルに送信し、テキストエディターで開いて、行をラップするかどうかを設定し、簡単に検索を実行できるようにします...不要な行などを削除せずに多くのコマンドを入力する必要があります。

cat file.log > log.txt およびgedit log.txtまたはナノなどのターミナルエディタ

編集:またはcp file.log log.txtもちろん、簡単かつ高速です... KeithBコメントのおかげで


1
なぜcatありませんかcp
KeithB

確かcpに簡単で速いでしょう!... lol-私は他の答えを読んでいたのでgrepawkそれを書きましたcatが、私はそれを修正しています、おかげで
ローレント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.