我可以使用 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
只有在替换文本不包含 |
时才有效
我在文本文件中有一行是这样的 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
只有在替换文本不包含 |