私はこのsedコマンドを見つけましたが、それが何をしているのかわかりません。内部変更ファイルを使用していることがわかります-i
。スクリプトを使用しており、-e
スクリプトはです$a\
。しかし、このスクリプトは何をしていますか?
sed -i -e '$a\' filename
答え1
他の人が言ったように、例えば存在するファイルの末尾に改行文字を追加するには?、GNU sed
(およびその他の実装)の$a\
場合、ファイルの末尾に改行文字がない場合は、ファイルの末尾に改行文字を追加します。
なぜそれが何をしているかは非常に明確ではなく、文書でもこれについて説明しません。しかし、ソースコードを確認してみると...
ドキュメントから始めましょう。$a\
はいバリエーションa
、特殊事例の活用GNU拡張:
GNU拡張として、
a
次のコマンドとテキスト-e
より簡単なスクリプトのために、2つのパラメータに分割できます。$ seq 3 | sed -e '2a\' -e hello 1 2 hello 3 $ sed -e '2a\' -e "$VAR"
a
このメソッドはsed
追加するテキストキューを使用して実装され、append_queue
キューを処理する必要がある場合名前の人dump_append_queue
、第一歩は
output_missing_newline (&output_file);
必要に応じて不足している改行を追加します。追加されたテキスト〜する現在の行の終わりではなく、別の行に追加します。次に、キューの内容を追加します。
を使用すると、sed -i '$a\'
必要に応じて行方不明の改行が追加され、キューが処理されます。ただし、キューが空であるため、他の変更は適用されません。
答え2
最後の行がない場合は、最後の行に改行文字が追加されます。
改行なしでファイルを作成する
$ printf 'line1\nline2' > file
$ od -c file
0000000 l i n e 1 \n l i n e 2
0000013
sedが何をしているか見てみましょう:
$ sed -i '$a\' file
$ od -c file
0000000 l i n e 1 \n l i n e 2 \n
0000014
再実行するとどうなりますか?追加するかどうかその他新しいチーム?
$ sed -i '$a\' file
$ od -c file
0000000 l i n e 1 \n l i n e 2 \n
0000014
いいえ。