sed 複雑なスクリプト

sed 複雑なスクリプト

理解しようとするこれは素晴らしい答えですの使い方を説明しますsed

いくつかのテストデータを設定しました。

printf "Line #%2d\n" {1..7} >file

その後実行

sed -e \$$'{w/dev/stdout\n;d}' -i~ file

このコマンドを理解しようとしていますsed。これまで私が考えたことは次のとおりです。

  1. -e

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

  1. この回答について説明してください/dev/stdout

  2. \n改行文字を表します。

  3. -i~

-i[サフィックス]、--in-place[=サフィックス]

ファイルを所定の位置に編集します(拡張子が指定されている場合はバックアップ)。

私はまだ理解できません。

ベストアンサー1

最初のコマンドは、7行のテキストを含むファイルを作成します。このデータが使用されますだから答えはsedこのコマンドの効果を説明するためにfile

$'...'sed(「C文字列」)を理解し、GNU(理解d}済み)を使用するシェルが与えられると、d;}2番目のコマンドはテストデータファイルの最後の行を標準出力に返し、ファイルから削除して生データをバックアップします(このfile~生データをバックアップするタスクです)。file~-i~

SO回答では、sed編集スクリプトはコマンドラインに次のように書かれています。

\$$'{w/dev/stdout\n;d}'

これはリテラルで、$その後に「C文字列」が続きます$'{w/dev/stdout\n;d}'。 C文字列の引用符は、\nリテラル改行で拡張されるようになっています。

${w/dev/stdout
;d}

...それは粗末なスクリプトsed方法です。

$ {
    w /dev/stdout
    d
}

このsed編集スクリプトは、変更されていない最後の行を除くすべての項目を出力に渡します(オプションfileにより-iファイルに移動されます)。

最後の行は、デフォルトの/dev/stdout出力(この場合)に書き込むのではなく、このコマンドを使用して作成され、削除されます。filewd

その結果、最後の行を除くすべての行が保持され(再記録)、file最後の行は標準出力(ターミナルに接続)として生成されます。

おすすめ記事