私は、ファイルの最後の行をファイルの先頭に移動するために、unixフォーラムでこのmagicalコマンドを見つけました。私はsedをかなり使っていますが、この程度ではありません。誰かが私に各部分を説明することができますか?誰かが私のためにこのsedコマンドを破ることができますか?
sed '1h;1d;$!H;$!d;G' infile
私は、ファイルの最後の行をファイルの先頭に移動するために、unixフォーラムでこのmagicalコマンドを見つけました。私はsedをかなり使っていますが、この程度ではありません。誰かが私に各部分を説明することができますか?誰かが私のためにこのsedコマンドを破ることができますか?
sed '1h;1d;$!H;$!d;G' infile
はい、エキゾチックコマンドを使用します。
意見に基づくコメント:私はsed
を使用していることを私がやって考えなかっただろう認めなければならない、と私はawk
に...このコマンドが何をやっていたのを私に納得させるためにテストをしなければならなかっただろう、それははるかに簡単です。 しかし、sed
には私の心の中には特別な場所があります。いくつかのsed
候補がCodeGolfにあるのだろうか:)
ここでは、以上の手続きに見える擬似コードで同じコマンド:
for line in infile:
# Always do this: Copy the current line to the pattern
pattern = line
# Process the script
if first line:
hold = pattern # 1h
pattern = ""; continue # 1d
elif not last line:
hold = hold + "\n" + pattern # $!H
pattern = ""; continue # $!d
pattern = pattern + "\n" + hold # G
# Always do this after the script is completed.
# Due to the continue statements above, this
# isn't always reached, and in this case
# is only reached for the last line.
print pattern
d
は、残りのスクリプトを実行せずにパターンスペースを消去し、次の入力行に進みます。
h
は、パターンスペースをホールドスペースにコピーします。
H
は、保留スペースに改行を追加し、保留スペースにパターンスペースを追加します。G
は、H
のようですが、他の方向にあります。ホールドスペースをパターンスペースにコピーします。N行のファイルに対する全体的な影響は、1行目からN-1行目までのホールドスペースのコピーを作成することです。パターンが行Nを保持している場合は、パターンスペースにホールドスペースを追加し、パターンスペースを標準出力に出力します。
ここから開始:https://www.gnu.org/software/sed/manual/html_node/index.html –
「man sed」または「info sed」は、魔法を解明するのに適した出発点です。助けを読んだ後も、このコマンドが何をするのか分からない場合は、aaginにお尋ねください。 – Pablo