首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sed中的变量后面追加文本

问在sed中的变量后面追加文本
EN

Stack Overflow用户
提问于 2015-02-17 16:15:21
回答 1查看 188关注 0票数 2

我有一些使用GNU并行的代码,它应该用表单vclist_2d_*.txt的一系列字符串替换输入文件中的文本,其中*是介于1和10000之间的一个数字。

代码语言:javascript
复制
FILES=(vclist_2d_*.txt)

parallel -j1  '
    sed -i "s/50pc\/vclist_2d_.*/50pc\/{}'\''/" 1759_input.py
    sed -i "s/schedule_analysis\/vclist_2d_.*/schedule_analysis\/{}'\\_temp\/1759_cs_output.spc''\''/" 1759_input.py
       ' ::: ${FILES[@]}

成功的第一个sed命令将1759_input中已经存在的任何vclist_2d_*文件替换为列表FILES中由{}定义的下一个文件。但是,第二个sed命令需要替换vclist_2d_*,并将文本_temp/1759_cs_output.spc'追加到该命令中。

但是,对于上面的代码,发生了两件事:

  1. vclist名称永远不会被列表中的下一个替换
  2. 文本.temp/1759_cs_output.spc被附加,而不是_temp/1759_cs_output.spc

我试过上述几种变体,但没有一种成功。我不知道为什么这对第一个sed成功,但对第二个不成功。我想也许_需要逃跑,但这没有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 17:50:47

我不太明白你在用单引号做什么:我要假设你的正则表达式太贪婪了,你需要添加一个被消耗掉的引号。我将把.*改为[^']0 --即零或多个非引号字符。

您所做的工作是所需的两倍:将这两个替换放到一个sed调用中

代码语言:javascript
复制
parallel -j1  ' 
    sed -i "
        s@\(50pc\)/vclist_2d_[^'\'']*@\1/{}@
        s@\(schedule_analysis\)/vclist_2d_[^'\'']*@\1/{}_temp/1759_cs_output.spc@
    " 1759_input.py
' ::: "${FILES[@]}"

为了减少反斜杠,我对s///命令使用了不同的分隔符

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28565905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档