bash - 我可以使用 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
解决方案
这里的问题只与引号有关——你得到的错误是因为你从 $newline 得到的替换文本包含/
字符。这会在第一个 seds
命令结束/
,使其将后面的字符视为修饰符。由于D
(第一个字符之后的第一个字符/
)不是有效的修饰符,因此您会收到错误消息。最简单的解决方法是转义/
替换文本中的字符:
newline='s:Variabels = "Path\/to\/80kVp\/NAME'${i}'_1"'
另一种可能性(仅适用于某些版本的 sed)是使用不同的字符来分隔s
命令:
sed -i "5s|.*|$newline|" Outputfile.txt
仅当替换文本不包含|
推荐阅读
- python-3.x - 在给定当前项目列表的情况下替换字典Python中的元素
- json - 如何在 Swift 中使用 Alamofire 读取本地 JSON
- node.js - 上传包含一些数据的文件以响应 node.js 服务器
- ruby - 为给定的 xpath 编写 WATIR 等效代码
- c# - 如何在 asp.net webforms 中使用 HttpClient
- c# - 如何获取其他程序内存的地址,然后在我的程序中读取
- python - 按多列熊猫中的值计数进行透视
- html - 两个图像悬停效果css
- omnet++ - Omnet++ 复合模块:将 1 个输入门连接到多个子模块
- parquet - pyarrow 通过列索引或顺序读取镶木地板?