Sed

這個 sed 對腳本做了什麼:$a

  • December 14, 2021

我遇到了這個 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\'時,如果需要,將添加缺少的換行符,然後處理隊列——但隊列是空的,因此不會進行額外的更改。

引用自:https://unix.stackexchange.com/questions/681422