Sed這個 sed 對腳本做了什麼:
這個 sed 對腳本做了什麼:$a
?
我遇到了這個 sed 命令,但我無法弄清楚它在做什麼。我知道它正在使用 更改文件
-i
,它正在使用腳本-e
並且腳本是$a\
,但是這個腳本在做什麼?sed -i -e '$a\' filename
正如其他人所說,例如如何在文件末尾添加換行符?,使用 GNU
sed
(和其他一些實現),$a\
如果文件沒有換行符,則在文件末尾添加換行符。為什麼這樣做還不是很清楚,文件也沒有解釋。但是,檢查原始碼確實…
讓我們從文件開始。
$a\
是 的變體a
,利用GNU 擴展的特殊情況:作為 GNU 擴展,
a
命令和文本可以分為兩個-e
參數,從而更容易編寫腳本:$ 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\'
時,如果需要,將添加缺少的換行符,然後處理隊列——但隊列是空的,因此不會進行額外的更改。