在文件(file1.txt
)中,我有/path1/|value1
(一個路徑,後跟一個值)。我需要找到包含該(唯一)路徑的行,然後更改該值。所以該行最終應該爲:/path1/|value2
。使用變量在ksh中查找並替換包含正斜槓的字符串
挑戰在於/path1/
,value1
和value2
部件都包含在變量中。
當我不使用一個變量,我可以使用(thanks to this page):
sed '/path1/s/value1/value2/g' file1.txt > copyfile1.txt
(這將創建原始文件,我可以使用mv
後覆蓋原文件的副本)
這只是尋找path1
。要搜索/path1/
我可以使用:
sed '/\/path1\//s/value1/value2/g' file1.txt > copyfile1.txt
使用the answers to this question about extracting a substring我可以把/path1/
,value1
和value2
部分納入變量。
所以我當前的代碼是:
sed '/'"${PATH}"'/s/'"${PREVIOUS_VALUE}"'/'"${NEW_VALUE}"'/g' file1.txt > copyfile1.txt
但是,這並不工作,因爲PATH變量包含正斜槓。利用信息from here我曾嘗試首先進行替換這樣的:
FORMATTED_PATH=$(echo "${PATH}" | sed 's/\//\/\//g')
,然後再使用FORMATTED_PATH
代替PATH
但隨後的查找和替換不工作(沒有錯誤消息,新的文件是空的)。並在日誌記錄FORMATTED_PATH = //path1//
(我認爲是正確的)。
我該如何做到這一點查找和替換使用包含正斜槓的變量?
(我發現via this answer,我需要關閉單引號,使用雙引號周圍的變量,然後再次打開單引號。但是,這並不能幫助與正斜槓。)
Thx Glenn,會檢查一下。也感謝PATH提示... *臉紅* – Wikis