在一个文件 ( file1.txt
) 中,我有/path1/|value1
(一个路径,后跟一个值)。我需要找到包含该(唯一)路径的行,然后更改值。因此,该行应以:/path1/|value2
.
挑战在于/path1/
和部分都包含在变量中value1
。value2
当我不使用变量时,我可以使用(感谢此页面):
sed '/path1/s/value1/value2/g' file1.txt > copyfile1.txt
(这会创建原始文件的副本,我以后可以使用 . 覆盖原始文件mv
。)
这只是搜索path1
。要搜索/path1/
我可以使用:
sed '/\/path1\//s/value1/value2/g' file1.txt > copyfile1.txt
使用关于提取子字符串的这个问题的答案,我可以将/path1/
,value1
和value2
部分放入变量中。
所以我目前的代码是:
sed '/'"${PATH}"'/s/'"${PREVIOUS_VALUE}"'/'"${NEW_VALUE}"'/g' file1.txt > copyfile1.txt
但这不起作用,因为 PATH 变量包含正斜杠。使用此处的信息,我首先尝试进行如下替换:
FORMATTED_PATH=$(echo "${PATH}" | sed 's/\//\/\//g')
首先,然后使用FORMATTED_PATH
代替,PATH
但随后查找和替换不起作用(没有错误消息,新文件为空)。在日志记录中FORMATTED_PATH = //path1//
(我认为是正确的)。
如何使用包含正斜杠的变量来查找和替换?
(我通过这个答案发现我需要关闭单引号,在变量周围使用双引号,然后再次打开单引号。但这对正斜杠没有帮助。)