注意:我特別在尋找編碼技巧,而不是替代解決方案。我知道awk,sed等可以很好地進行此行內編輯。
$ echo '1' > test
$ cat test > test
$ cat test
$
有沒有辦法以某種方式使第二個命令輸出原始內容(1在這種情況下)?同樣,我正在尋找一種無需使用輔助檔案就可以作業的hack (在后臺使用輔助檔案很好)。這個論壇上的另一個問題只關注替代解決方案,這不是我想要的。
uj5u.com熱心網友回復:
您可以將內容存盤在 shell 變數而不是檔案中。
var=$(<test)
printf "%s\n" "$var" > test
請注意,這可能僅適用于文本檔案,而不適用于二進制檔案。如果您需要處理它們,您可以在管道中使用編碼/解碼命令。
如果不將資料存盤在某處,您將無法做到這一點。當您將輸出重定向到檔案時,shell 會立即截斷該檔案。如果您使用管道,則管道中的命令與外殼程式同時運行,并且無法預測哪個將首先運行——外殼程式截斷檔案或嘗試從中讀取的命令。
uj5u.com熱心網友回復:
感謝@Cyrus 對原始問題的評論
$ sudo apt install moreutils
$ echo '1' > test
$ cat test | sponge test
$ cat test
1
where sponge它確實需要安裝一個額外的包并使用諸如檢查是否已安裝之類的方法預先檢查二進制檔案。
uj5u.com熱心網友回復:
如果您碰巧使用macos,如果檔案不是太龐大,您可以隨時按照以下步驟操作:
perform the editspipe it to the clipboard (or "pasteboard" in mac lingo)paste it back to original file name
|
{... edits to file1 ...} | pbcopy; pbpaste > file1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/496508.html
上一篇:使用命令替換修改陣列
