Sed
如果從未執行 w 命令或標誌,是否允許 sed 創建文件?
我剛剛發現如果我執行
echo foo|sed 's/x/u/w/tmp/bar'
使用 GNU會創建
sed
一個空文件/tmp/bar
,這不是預期的,因為該w
標誌不適用。更糟,echo foo|sed 'd;w/tmp/bar'
還會創建那個空文件!呸呸呸。
事實上,GNU 的
sed
手冊承認:該文件將在讀取第一行輸入之前創建(或截斷)
我想,如果您不必測試每個文件句柄是否打開,那麼實現起來會更容易,但是 POSIX 的定義
sed
並沒有說可以在不執行命令的情況下觸摸文件。--posix
GNU的切換sed
沒有幫助。您知道
sed
在這種情況下其他實現的行為嗎?還是我誤解了這裡的標準?
關於命令的處理和命令的標誌,GNU 實現
sed
遵循 POSIX 規範。以下來自實用程序的 POSIX 規範的擴展描述部分:w``w``s
sed
每個wfile都應在處理開始之前創建。
w
“wfile”是由命令或命令w
標誌寫入的文件s
。在 FreeBSD、macOS、OpenBSD 和 NetBSD 上找到的 BSD 實現
sed
有一個非標準-a
選項,它會延遲“wfile”的創建或截斷,直到它被寫入:
-a
預設情況下,作為
w
函式參數列出的文件在任何處理開始之前創建(或截斷)。該-a
選項導致sed
延遲打開每個文件,直到包含相關w
函式的命令應用於輸入行。