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



我在一个文本文件中有一行内容如下:Variable="路径/到/文件";但我正在做的是使用bash脚本中的while循环将该行替换为不同的"换行符"。

我这样做是通过这个命令

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

我将Outputfile.txt中的第五行替换为$newline。我试过各种各样的"one_answers"或使用${newline},但我似乎无法使其工作。换行符本身有引号这一事实似乎有问题,因为我需要在新的文本文件中有引号。

这是我存储的新行:

newline='s:Variables="路径/到/80kVp/NAME"${i}"_1">

其中变量i循环通过。

有什么处理这个问题的想法吗?

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

这里的问题与引号只有很小的关系——您得到的错误是因为您从$newline得到的替换文本包含/字符。这将在第一个/处结束seds命令,使其将以下字符视为修饰符。由于D(第一个/之后的第一个字符(不是有效的修饰符,因此会出现错误。最简单的修复方法是转义替换文本中的/字符:

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

另一种可能性(只适用于sed的某些版本(是使用不同的字符来定义s命令:

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

仅当替换文本不包含|时才起作用

最新更新