ファイルの先頭と末尾から空白行を削除したいが、途中で空でない行間の空白行を削除したくない。私は解決策になると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で、slurp
Rakuの非破壊置換演算子を使用します。S///
結果文字列を返す。 Rakuの置換演算子は最も長いトークン一致(LTM、改善)を表すため、交換はRakuの「最初の一致」置換演算子を介して||
行われます。|
/k
Perl5および/または/K
Rakuに対応するコマンドは簡単<( ... )>
で、個別にまたはペアで使用できます。これらの演算子は、正規表現エンジンに<(
前または後の一致を削除するように指示します)>
。 [しかし、\K
現在の問題ではRakuの対応する機能は不要に見えます]。