ファイルから空でないか空白ではない最初と最後の行を印刷したいと思います。可能であれば、またはsed
を使用してくださいawk
。
- 入力ファイル:
その後に空白行があります123 345 456 087 er 56 32 78
32 78
。 - 希望の出力:
123 345 32 78
ベストアンサー1
質問のテキストが修正されたので、ここで両方の質問に答えています。
ファイルの最初の行と2番目の行をどのように出力しますか(元の質問には「2行目」という用語が含まれています)。
null以外の空白ではなく、最初と最後の行をどのように出力しますか?
エディタを使用すると、行のed
アドレス指定率がやや柔軟になりますsed
。これは、主に一度に1行ではなくすべてのデータがメモリに読み込まれるためです。
$ printf '%s\n' 1p '$-1p' Q | ed -s file
123 345
32 78
終了する前に、入力ファイルの最初の行と2番目の行から最後の行まで印刷されます。 2行目はアドレス指定に使用され、$-1
に短縮できます$-
。
最後に空白行があるかどうかわからない場合は、1行目から逆に検索して内容を含む行を見つけて印刷できます。
$ printf '%s\n' 1p '?[[:graph:]]?p' Q | ed -s file
123 345
32 78
使用sed
:
$ sed -n -e 1p -e '${ g; p; }' -e h file
123 345
32 78
これはまず各ラインのデフォルト出力をオフにします-n
。次に、最初の行を印刷します。すべての行はsave to Reserved spaceを使用しh
、最後の行ではg
それを使用して予約済みスペースを取得して印刷します。最後の2つの式の順序により、2番目から最後の行まで印刷されます。
少しだけ変更すると、2行目かどうかにかかわらず、空でない最後の行を出力するように変更できます。
$ sed -n -e 1p -e '/[[:graph:]]/h' -e '${ g; p; }' file
123 345
32 78
grep
そして組み合わせを使用すると、最初は空sed
または空のように見えるすべての行をフィルタリングしてから、最初の行と最後の行のみを出力できます。
$ grep '[[:graph:]]' file | sed -n -e 1p -e '$p'
123 345
32 78
元のデータの最初の行でなくても空でない最初の行も出力されます。