下一個班輪打印出來的文件反向你能解釋一下這個sed單線嗎?
$ sed -n '1!G;h;$p' test.txt
內容時sed的逐行讀取文件中的行這怎麼可能?你能解釋的
n
標誌1!
G
h
- 和
$p
在這個命令的含義?
下一個班輪打印出來的文件反向你能解釋一下這個sed單線嗎?
$ sed -n '1!G;h;$p' test.txt
內容時sed的逐行讀取文件中的行這怎麼可能?你能解釋的
n
標誌1!
G
h
$p
在這個命令的含義?
這將執行與tac
相同的工作,即恢復行的順序。 重寫sed腳本僞代碼,這意味着:
$line_number = 1;
foreach ($input in $input_lines) {
// current input line is in $input
if ($line_number != 1) // 1!
$input = $input + '\n' + $hold; // G
$hold = $input; // h
$line_number++
}
print $input; // $p
正如你所看到的,SED語言:-)的1!
和$
是所謂的地址,裏面放的條件非常傳神當命令應運行。 1!
表示不在第一行,$
表示最後。 Sed有一個輔助存儲器寄存器,稱爲hold space
。
欲瞭解更多信息在Linux控制檯鍵入info sed
(這是最好的文檔)。
-n
在循環中禁用默認的print $input
命令。
術語pattern space
和hold space
分別是在本例中變量$input
和$hold
(分別)的等同物。
n flag -> Disable auto-printing.
1! -> Any line except the first one.
G -> Append a newline and content of 'hold space' to 'pattern space'
h -> Replace content of 'hold space' with content of 'pattern space'
$ -> Last line.
p -> print
所以,這意味着:扭轉文件的內容,據我瞭解。
編輯添加一些說明(感謝波東,看到他對原來的註釋):
地址,像1
和$
必然要下一個命令,利用分組{...}
或單身沒有他們。所以在這種情況下,1!
適用於G
和$
到p
,而h
未附加到地址並適用於所有地址。那是$!G
和$!{G}
是一樣的。
http://www.thegeekstuff.com/2009/12/unix-sed-tutorial-7-examples-for-sed-hold-and-pattern-buffer-operations/ – perreal 2012-03-29 21:34:34
爲什麼要刪除http:// stackoverflow.com/questions/9936151/piping-bash-input-arguments-in-egreps-regular-expression?我認爲這是一個很好的問題,並得到了很好的答案。 – sarnold 2012-03-30 02:41:23
N.B.另一種方式寫這個是'sed'1!G; h; $!d'' – potong 2012-03-30 07:11:53