首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sed -用文件内容替换模式时的“未知命令”

sed -用文件内容替换模式时的“未知命令”
EN

Stack Overflow用户
提问于 2021-01-08 23:01:01
回答 1查看 141关注 0票数 1

我试图操纵一些“模板”文本文件。这意味着这些文件包含一些“令牌”,需要用一些实际的字符串来替换--或者硬编码,或者从其他文件中读取。

我有以下两行:

代码语言:javascript
复制
    sed -r -e 's_<!-- cssintern -->_<style type="text/css">\n<!-- cssintern -->\n</style>\n_' -i "$out_dir_aca/books_1by1/independent/$(basename "$aca_frag").html"
    sed -e '^<!-- cssintern -->^' -e '{r '"$src_dir_frags_struct/styles1.css.frag" -e 'd}' -i "$out_dir_aca/books_1by1/independent/$(basename "$aca_frag").html"

第一个很好用。问题是,第二个错误生成了一个"unkown命令“错误,而我已经没有解决它的想法了。调试输出如下(最后一行的错误文本):

代码语言:javascript
复制
+ for aca_frag in $out_dir_aca/frags_1by1/*
+ '[' -f '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/2_txt_out/aca/frags_1by1/09.14 - Acatistul inaltarii Sfintei Cruci.frag' ']'
++ basename '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/2_txt_out/aca/frags_1by1/09.14 - Acatistul inaltarii Sfintei Cruci.frag'
+ echo '    09.14 - Acatistul inaltarii Sfintei Cruci.frag'
    09.14 - Acatistul inaltarii Sfintei Cruci.frag
+ cat '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/1_txt_in/##_frags_struct_##/doctypeXHTML.frag'
++ basename '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/2_txt_out/aca/frags_1by1/09.14 - Acatistul inaltarii Sfintei Cruci.frag'
+ cat '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/1_txt_in/##_frags_struct_##/head.frag'
++ basename '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/2_txt_out/aca/frags_1by1/09.14 - Acatistul inaltarii Sfintei Cruci.frag'
+ cat '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/1_txt_in/##_frags_struct_##/foot.frag'
++ basename '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/2_txt_out/aca/frags_1by1/09.14 - Acatistul inaltarii Sfintei Cruci.frag'
++ basename '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/2_txt_out/aca/frags_1by1/09.14 - Acatistul inaltarii Sfintei Cruci.frag'
+ sed -r -e 's_<!-- cssintern -->_<style type="text/css">\n<!-- cssintern -->\n</style>\n_' -i '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/2_txt_out/aca/books_1by1/independent/09.14 - Acatistul inaltarii Sfintei Cruci.frag.html'
++ basename '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/2_txt_out/aca/frags_1by1/09.14 - Acatistul inaltarii Sfintei Cruci.frag'
+ sed -re '^<!-- cssintern -->^' -re '{r /home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/1_txt_in/##_frags_struct_##/styles1.css.frag' -re 'd}' -i '/home/vici/Dropbox/MyFiles/work/___rug/_!_workarea/2_txt_out/aca/books_1by1/independent/09.14 - Acatistul inaltarii Sfintei Cruci.frag.html'
sed: -e expression #1, char 1: unknown command: `^'

我使用分离器^_/,我用简单和双引号的“所有”方式播放,还有我在互联网上找到的所有东西。没有什么能改变错误仍然存在的事实。

过去我用过这句话

代码语言:javascript
复制
sed.exe -i -e '/%%H/{r ..\/##_frags_##\/out\/%%H' -e 'd}' .\out\out.frag

在Windows cmd脚本中,工作正常。(%%H在用for解析文件夹中的所有文件时引用文件名)。实际上,我正在Linux中重写旧脚本,希望它能增加简单性和额外功能。

我打算修改以下sed命令:

代码语言:javascript
复制
sed -e '/<TEXT1>/{r File1' -e 'd}' -i File2

满足我的特殊需要。

Note:我提供了确切的文件名和路径,认为它们可以提供一个洞察力。

注意事项:我在虚拟机中使用Debian10.7。

注意事项:脚本文件以#!/bin/bash -xv开头。显然,只有在调试时才使用-xv,否则会丢失。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-10 10:19:57

语法是 (评论地雷):

代码语言:javascript
复制
[2addr] {editing command       # No newline between '[2addr]' and '{'!
editing command
...
}

例如,[2addr]中的/filtering/表达式。选项-e做(强调地雷):

如果指定了任何-e或-f选项,则编辑命令的脚本最初应为空的。每个-e或-f选项指定的命令将按指定的顺序添加到脚本中。每次添加时,如果以前的添加(如果有的话)来自-e选项,则应在新添加之前插入a。生成的脚本应具有与在操作数部分中描述的脚本操作数相同的属性。

[2addr]{之间有换行符时,脚本无效:

代码语言:javascript
复制
$ sed -e '/something/' -e '{' -e '}' /dev/null
sed: -e expression #1, char 11: missing command
$ sed '
/something/
{
}' /dev/null
sed: -e expression #1, char 13: unknown command: `
'

{[2addr]放在一起解决了问题,因为它删除了换行符:

代码语言:javascript
复制
$ sed -e '/somethimg/{' -e '}' /dev/null

因此,将其与筛选表达式放在一起:

代码语言:javascript
复制
sed
   -e '\^<!-- cssintern -->^{'
   #   ^^                  ^^ here '{' is with /expression/
   # or just: -e '/<!-- cssintern -->/{'
   -e 'r blabla/styles1.css.frag'
   -e d
   -e '}' -i 'blabla/12.17 - Acatistul Sfantului Proroc Daniel.frag.html'

应该没事的。

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

https://stackoverflow.com/questions/65637524

复制
相关文章

相似问题

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