我可以使用 bash 将文件中的一行替换为包含引号的新行吗?

Can I replace a line in a file with a new line that contains quotation marks using bash?

我在文本文件中有一行是这样的 s:Variable = "Path/to/file" 但我正在做的是用不同的 'newline' 替换该行bash 脚本中的 while 循环。

我这样做的方式是通过这个命令

sed -i '' '5s/.*/'$newline'/' Outputfile.txt

我将 Outputfile.txt 中的第五行替换为 $newline。我已经尝试了各种 "" 和 '' 或使用 ${newline} 的实例,但我似乎无法让它工作。换行符本身带有引号这一事实似乎存在问题,因为我需要在新文本文件中使用引号。

这是我存储的换行符:

换行符='s:Variabels = "Path/to/80kVp/NAME'${i}'_1"'

循环变量 i 的位置。

有什么处理方法吗?

输出错误:sed: 1: "5s/.*/s:Sc/DoseToCompon ...": 替换命令中的错误标志:'D

此处的问题仅与引号有关 -- 您收到的错误是因为您从 $newline 获得的替换文本包含 / 个字符。这会在第一个 / 处结束 sed s 命令,导致它将后面的字符视为修饰符。由于 D(第一个 / 之后的第一个字符)不是有效的修饰符,因此会出现错误。最简单的解决方法是转义替换文本中的 / 个字符:

newline='s:Variabels = "Path\/to\/80kVp\/NAME'${i}'_1"'

另一种可能性(仅适用于某些版本的 sed)是使用不同的字符来分隔 s 命令:

sed -i "5s|.*|$newline|" Outputfile.txt

只有在替换文本不包含 |

时才有效