gpt4 book ai didi

string - 使用变量查找并替换 ksh 中包含正斜杠的字符串

转载 作者:行者123 更新时间:2023-12-02 18:32:20 24 4
gpt4 key购买 nike

在文件(file1.txt)中,我有/path1/|value1(一个路径,后跟一个值)。我需要找到包含该(唯一)路径的行,然后更改该值。因此该行最终应为:/path1/|value2

挑战在于 /path1/value1value2 部分都包含在变量内。

当我不使用变量时,我可以使用 ( 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/value1value2 部分放入变量中。

所以我当前的代码是:

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 我需要关闭单引号,在变量周围使用双引号,然后再次打开单引号。但这对正斜杠没有帮助。)

最佳答案

代码几乎是正确的。而不是:

FORMATTED_PATH=$(echo "${PATH}" | sed 's/\//\/\//g')

我应该有:

FORMATTED_PATH=$(echo "${PATH}" | sed 's/\//\\\//g')

这会产生正确的日志记录:FORMATTED_PATH =\/path1\/

关于string - 使用变量查找并替换 ksh 中包含正斜杠的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13344232/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com