尝试使用 sed 命令在 test.txt 文件中包含此 var 以删除双引号
Posted
技术标签:
【中文标题】尝试使用 sed 命令在 test.txt 文件中包含此 var 以删除双引号【英文标题】:Attempting to include this var in the test.txt file using sed command to remove double quotes 【发布时间】:2021-10-06 04:37:32 【问题描述】:我正在尝试使用 sed
命令将这个 var 包含在 test.txt 文件中。
尝试以下脚本:
#!/bin/bash
var="test 'test:test:1.0'"
sudo sed -i '/dependencies /a '"$var"'' test.txt
test.txt
dependencies
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-cache'
group = 'org.gradle'
我正在使用sed
来执行此操作,它正在更新test.txt
文件,但它添加了双引号,
当前脚本结果:
dependencies
"test 'test:test:1.0'"
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-cache'
group = 'org.gradle'
如果我从变量中删除双引号或sed
命令会导致错误。
错误
sed: can't read 'ch.qos.logback:logback-classic:1.2.2'": No such file or directory
我怎样才能忽略这个双引号?
【问题讨论】:
无法复制,link to repl。请发布脚本执行的declare -p var
或set -x
的输出。您的变量不是 var="test 'test:test:1.0'"
,而是var="\"test 'test:test:1.0'\""
。
这闻起来很像一个问题,原因与BashFAQ #50 相似——也就是说,误解了句法和文字引号之间的区别。 (如果你只有 syntactic 双引号——正如问题中显示的代码那样——你不会遇到这个问题,正如 KamilCuk 的链接复制器所展示的那样;因此,你必须改为使用文字) .
【参考方案1】:
如果我使用 OP 的 var
分配 ...
var="test 'test:test:1.0'"
...然后OP的sed
生成:
dependencies
test 'test:test:1.0'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-cache'
换句话说,我无法重现该问题。
另一方面,如果如 KamilCuk 推测的那样,var
包含双引号,例如:
var="\"test 'test:test:1.0'\""
...然后我可以复制 OP 的输出。
因此,假设双引号实际上是分配给var
的一部分,一个想法是使用参数替换,例如:
var="\"test 'test:test:1.0'\""
sed "/dependencies /a $var//\"/" test.txt
注意:一旦 OP 对结果感到满意,-i
标志可以重新添加到 sed
调用中
这会生成:
dependencies
test 'test:test:1.0'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-cache'
【讨论】:
【参考方案2】:这可能对你有用(GNU sed):
var="test 'test:test:1.0'"
sed '/dependencies /n;h;G;s/\S.*\n/'"$var"'\n/' file
我也无法重现 OP 的问题。
但是,此解决方案确实将插入的行缩进到相同的深度和正确的位置。
【讨论】:
以上是关于尝试使用 sed 命令在 test.txt 文件中包含此 var 以删除双引号的主要内容,如果未能解决你的问题,请参考以下文章
mac上执行sed的编辑 -i命令报错sed: 1: "test.txt": undefined label ‘est.txt’或sed: 1: "2a est&qu