ファイルの先頭と末尾から空白行を削除する方法は?

ファイルの先頭と末尾から空白行を削除する方法は?

ファイルの先頭と末尾から空白行を削除したいが、途中で空でない行間の空白行を削除したくない。私は解決策になるとsed思います。awk

源泉:

1:
2:
3:line1
4:
5:line2
6:
7:
8:

出力:

1:line1
2:
3:line2

答え1

この試み、

ファイルの先頭から空白行を削除するには:

sed -i '/./,$!d' filename

ファイルの末尾から空白行を削除するには:

sed -i -e :a -e '/^\n*$/{$d;N;ba' -e '}' file

ファイルの先頭と末尾から空白行を削除するには:

sed -i -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;ba' -e '}' file

男性からsed

-e script, --expression=script -> 実行するコマンドにスクリプトを追加します。

b label -> labelに分岐します。ラベルが省略された場合、スクリプトの最後に分岐します。

a - >行の後にテキストを追加します(代替構文)。

$-> は最後の行と一致します。

n N - >パターンスペースに改行文字を追加した後、パターンスペースに次の入力行を追加します。これ以上入力がない場合、sed は他のコマンドを処理せずに終了します。

答え2

この awk アプレットは削除されます。スタートファイル:

awk 'NF {p=1} p'

したがって、tacこれを反転ラインと組み合わせることで、次のようになります。

awk 'NF {p=1} p' file | tac | awk 'NF {p=1} p' | tac
line1

line2

盗む@guillermochamorroコマンド置換のヒント:

awk 'NF {p=1} p' <<< "$(< file)"

答え3

ファイルがメモリ要件を満たすのに十分小さい場合:

$ perl -0777 -pe 's/^\n+|\n\K\n+$//g' ip.txt
line1

line2
  • -0777完全な入力ファイルを読む
  • ^\n+文字列の先頭から1つ以上の改行
  • \n\K空でない最後の行で改行文字を削除しない
  • \n+$文字列の末尾に1つ以上の改行があります。

答え4

Raku(以前のPerl_6)の使用:

Rakuを使用してからファイルを読み取る場合、linesこの trim機能を賢く使用すると、ファイルの先頭と末尾から空白行(スペースなど)を消去できます。

$ raku -e 'lines.join("\n").trim.put;' start_end.txt
lineX
line1

line2
line1

line2
line1

line2
line1



line2
~$

入力ファイルは@schrodigerscatcuriosityで使用するのと同じです(ファイルの先頭に2つの空行、ファイルの最後に2つの空行)。ファイルの開始/終了のみをクリーンアップする必要がある場合は、trim-leadingあなたtrim-trailingの友達です。

または、以下は、いくつかのRaku機能を使用して@SundeepのPerl5コードを非常に簡単に翻訳したものです。

raku -e 'S:g/ ^\n+ || \n+$ //.put given slurp;' start_end.txt

Perl5からRakuに翻訳する場合:ファイルは-edで、slurpRakuの非破壊置換演算子を使用します。S///結果文字列を返す。 Rakuの置換演算子は最も長いトークン一致(LTM、改善)を表すため、交換はRakuの「最初の一致」置換演算子を介して||行われます。|

/kPerl5および/または/KRakuに対応するコマンドは簡単<( ... )>で、個別にまたはペアで使用できます。これらの演算子は、正規表現エンジンに<(前または後の一致を削除するように指示します)>。 [しかし、\K現在の問題ではRakuの対応する機能は不要に見えます]。

https://raku.org

関連情報