首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash/Shell替换从x行到y行的文本块这两行都包含在另一个文件的内容中

Bash/Shell替换从x行到y行的文本块这两行都包含在另一个文件的内容中
EN

Stack Overflow用户
提问于 2016-10-27 18:30:56
回答 4查看 823关注 0票数 1

假设文件A中的I包含以下内容

代码语言:javascript
复制
1 <div class="a"></div>
2 <div class="b"></div>
3 <div class="c"></div>
4 <div....
5 ...
6 ...
7 ...
8 ...
9 <div class="i"></div>

我包含了实际上不存在的行号。

我的脚本中有两个名为start_lineend_line的变量,这两个变量包含我希望开始替换的行和希望结束替换的行

然后我有一个文件B,它也是一个名为export的变量,它包含一些文本,也是HTML标签(EDIT:认为这是无关紧要的-但看起来并非如此)

当我知道这些数字是变量,并且想要将它们替换为文件的内容时,如何将文件A中的所有内容从第4行替换到第7行?文件的内容也是一个变量(我猜可以是文件位置,也可以是相同的cat变量)。

我一直在胡乱摆弄sed和range的东西-n,但是...还有一些awk --但这里是shell和bash中的全部n00b

到目前为止,我已经尝试过了(变量名不一样,但我希望应该有意义

代码语言:javascript
复制
sed "-n${start_line},${end_line} s/${stump_text}" "$export_file"

编辑:糟糕的是,我没有通知实际被替换的文本是HTML

EN

回答 4

Stack Overflow用户

发布于 2016-10-27 19:11:02

试一试

代码语言:javascript
复制
sed -e "${start_line} r ${fileB}" -e "${start_line},${end_line} d" "$fileA"

由两个表达式组成:

  • -e "${start_line} r ${fileB}"用于读取由${fileB}指定的文件内容,并将其添加到由${start_line}
  • -e "${start_line},${end_line} d指定的行地址之后以删除这些地址范围中的行
票数 1
EN

Stack Overflow用户

发布于 2016-10-27 19:14:03

在awk中:

代码语言:javascript
复制
$ cat foo.awk
NR==start {                     # at start, output fileB.txt
    while (getline < file) 
        print }
NR>=start && NR <= end { next } # between start and end do nothing
1                               # print

运行它:

代码语言:javascript
复制
$ fileb=fileb.txt;  start=4;  end=7    # your values into variables
$ awk -v file=$fileb  -v start=$start  -v end=$end  -f foo.awk  fileA.txt
票数 1
EN

Stack Overflow用户

发布于 2016-10-27 18:46:01

如果我正确理解了您的意思,并且$export_file包含文件的名称,并且$stump_text文本将$start_line中的内容替换为$end_line,则应该是:

代码语言:javascript
复制
sed -i '${start_line},${end_line}s/.*/${stump_text}/' "$export_file"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40282310

复制
相关文章

相似问题

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