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

标签 string variables replace ksh

在文件(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/

相关文章:

java - 批量替换char

ruby-on-rails - 如何在 Rails 3 中制作自定义助手?

带有 REPLACE 的更新语句中的 mysql 案例

c - 将信息放入列表中

java - 在每个元音前添加文本

mysql - 是否可以只更改 mysql 中的小数部分?

java - Java中Varchar中英文混合的字符串长度

string - bash 从文件中的每个字符串中读取一个字符

python - 循环 "Forgets"删除一些项目

php - var_dump 报告错误的字符串长度是什么意思?