我在unix論壇上發現了這個神奇的命令,將文件的最後一行移動到文件的開頭。我用了很多sed,但沒有達到這個程度。有人可以向我解釋每個部分嗎?有人能爲我打破這個sed命令嗎?
sed '1h;1d;$!H;$!d;G' infile
我在unix論壇上發現了這個神奇的命令,將文件的最後一行移動到文件的開頭。我用了很多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時,將保持空間附加到圖案空間並將圖案空間打印到標準輸出。
start here:https://www.gnu.org/software/sed/manual/html_node/index.html –
'man sed'或'info sed'是解開魔法的好起點。如果在閱讀幫助後,你仍然不明白這個命令是幹什麼的,請問阿金。 – Pablo