首页 > 解决方案 > 我可以使用 bash 将文件中的一行替换为包含引号的新行吗?

问题描述

我在一个文本文件中有一行类似于 s:Variable = "Path/to/file" 但我正在做的是使用 bash 脚本中的 while 循环将该行替换为不同的“换行符”。

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

sed -i '' '5s/.*/'$newline'/' 输出文件.txt

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

这是我存储的换行符:

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

其中变量 i 被循环通过。

关于如何处理这个问题的任何想法?

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

标签: bashwhile-loopterminaltxtquotation-marks

解决方案


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

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

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

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

仅当替换文本不包含|


推荐阅读