Shell-Script
sed 命令用另一個文件的內容替換文件中最後出現的單詞
- macOS
sed
命令替換文件中最後一次出現的單詞- 替換為另一個文件中的內容
- 僅替換最後一次出現,意味著僅一次。
- 該單詞可以是子字元串
abchello
或helloabc
- 單詞後面可以有尾隨空格或換行符
sample_file_path = “/Users/saurav/sample.text” sample_file_path_1 = “/Users/saurav/sample1.text”
sample.txt
:hello hi hello ok
sample1.txt
:I am doing great
預期輸出(
sample.txt
):hello hi I am doing great ok
需要使用文件路徑變數
在三個步驟中,使用與macOS 上
sed
兼容的語法,或者(目前 macOS 系統上的兩個主要 shell):/usr/bin/sed``bash``zsh
sed -n '/hello/=' sample.txt | sed -e '$!d' -e $'s/.*/&r sample1.txt\\\n&d/' | sed -f /dev/stdin sample.txt
這
sed
分三個步驟使用:
sample.txt
查找匹配的所有行hello
並輸出與這些行對應的行號。- 刪除除第一步輸出的最後一行以外的所有行號(使用
$!d
,“如果這不是最後一行,請刪除它”),並創建一個兩行sed
腳本,該腳本將通過首先讀取sample1.txt
然後刪除最後匹配行來修改原線。鑑於最後一個匹配hello
是在原始文件的第 3 行,這個腳本看起來像3r sample1.txt 3d
- 將建構的
sed
腳本應用於文件sample.txt
。您是否要“就地”進行編輯,以便
sample.txt
修改原始內容,然後使用sed -n '/hello/=' sample.txt | sed -e '$!d' -e $'s/.*/&r sample1.txt\\\n&d/' | sed -i '' -f /dev/stdin sample.txt
相同的命令集,但使用您的變數
$sample_file_path
和$sample_file_path_1
兩個文件路徑:sed -n '/hello/=' "$sample_file_path" | sed -e '$!d' -e 's,.*,&r '"$sample_file_path_1"$'\\\n&d,' | sed -i '' -f /dev/stdin "$sample_file_path"
請注意,我已將第二個命令中的分隔符從
/
更改,
為 ,因為文件路徑包含斜杠。s///
您可以在命令中使用不屬於正則表達式或替換文本的任何字元作為分隔符。