使用shell脚本替换与更新文件里的一段内容,可以使用sed, awk等Linux工具

我有个test.xml文件,里面有一大段文字
<abcdef>
kkkk
kkk
adsf
...
...

</abcdef>
现在需要把这两个<>之间的内容替换掉。

给定两个变量 $hostnames="host1,host2,host3..."
$paragraph="many_strings" (多行文字)
找到<abcdef>与</abcdef>之间的内容删除,然后把以下内容添加进去

for hname in $hostnames
do

insert $hname

insert $paragraph

done

请教该如何实现?谢谢!~

我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件。具体步骤如下:

1)截取test.xml文件起始行到<abcdef>行,保存到tmp文件;

2)将要添加的内容根据变量值展开,附加写入tmp文件;

3)截取test.xml文件</abcdef>行到结束行,附加写入tmp文件。

4)移动tmp文件覆盖test.xml文件。

 

代码:

#!/bin/sh
$hostnames="host1,host2,host3 ..."
$paragraph="many_strings"
sed -n '1,/^<abcdef>/p' test.xml >tmp
cat <<EOF >>tmp
for hname in `echo "$hostnames" | tr ',' ' '`
do
  insert $hname 
  insert $paragraph
done
EOF
sed -n '/^<\/abcdef>/,$p' test.xml >>tmp
mv tmp test.xml

 注意:

1) for a in b 结构中,b集合里的内容必需要空格分隔。所以我这里做了转换,用tr命令将逗号分隔改为了空格分隔。

2)第二个EOF必需顶格写,前面不能有空格。

温馨提示:内容为网友见解,仅供参考
无其他回答

...文件里的一段内容,可以使用sed, awk等Linux工具
1)截取test.xml文件起始行到<abcdef>行,保存到tmp文件;2)将要添加的内容根据变量值展开,附加写入tmp文件;3)截取test.xml文件<\/abcdef>行到结束行,附加写入tmp文件。4)移动tmp文件覆盖test.xml文件。代码:!\/bin\/sh$hostnames="host1,host2,host3 ..."$paragraph="many_strings"sed -n...

Linux下的shell编程 如何替换文件中的内容
方法1:sed -i 's\/被替换的内容\/要替换成的内容\/' file 方法2:sed 's\/被替换的内容\/要替换成的内容\/g' file > file.out;mv file.out file。

shell如何取出特定文本内容并替换另一个文本中的指定内容???
1、按=分割取第二列 cat $file1|grep mqserver|awk -F= '{print $2}'`2、直接替换文件内容 sed -i "s\/127.0.0.1\/192.168.1.1\/" file1 3、实例:!\/bin\/sh file1=ip1.txt file2=ip2.txt IP1=`cat $file1|grep mqserver|awk -F= '{print $2}'`IP2=`cat $file2|grep...

shell脚本替换A、B两个文件里面的内容
可以使用sed进行操作,先定义一个参数读取A文件中的第一行 LineA=`sed...` 或者是使用cat把内容读取出来,再使用sed的替换方法,将B文件中的第一行替换为$LineA即可。希望有帮助

在linux下怎么使用shell脚本修改文本里的相关内容?
使用`ps`命令查找进程信息,通过`grep`过滤出所需进程,最后利用`sed`和`awk`提取进程ID。函数示例代码如下:bashfunction GetPID($username, $process_name) { ps -u $username -o pid,command | grep -v "total" | grep $process_name | awk '{print $1}'}2. 检测进程CPU利用率实时监控...

shell脚本定位某个文件中特定位置的字符串并进行替换应该怎么写?_百度...
根据位置替换即可:read ipsed -ri "\/subnet\/s\/(subnet )[^ ]+( netmask.*)\/\\1$ip\\2\/" \/mnt\/file\/subnet\/ - 先正则匹配到含有subnet的行,然后替换。替换的时候将不变的部分用小括号括起来,后面依次用\\1 , \\2 原封不动地引用回来。-r 选项用于支持扩展正则,这样就不需要额外的转义符...

...根据第二行内容,替换第一行内容 可以写成shell脚本
我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件。具体步骤如下:1)截取test.xml文件起始行到<abcdef>行,保存到tmp文件;2)将要添加的内容根据变量值展开,附加写入tmp文件;3)截取test.xml文件<\/abcdef>行到结束行,附加写入tmp文件。4...

linux shell编程中文件内容修改方法
!\/usr\/bin\/ksh 这里的两个变量一个是学号,一个是数据文件 serial="S1002"dbfile="cj.db"显示行号和该行的信息 showMessage(){ sed -n "\/${serial}\/{=;p;}" ${dbfile} } 设置数学成绩 setMath(){ sed "\/${serial}\/s\/:[^:]\\{1,\\}\/:$1\/3" ${dbfile} } 设置语文成绩 set...

linux shell编程sed用法
略难。一个比较简明的方法的大概思路是:声明一个变量计空行的数目。数到1之后,开始输出(或者换入交换空间)。数到4的时候退出程序(或者把交换空间里的内容换出来输出再退出)。这样如果想改成输出其它段落的话,只需改数字即可。

linux 三剑客(grep,awk,sed)
打印)、a(追加)、s(替换)等。通过sed,可以实现文本的批量修改,如替换文件内容或删除特定行。在实际应用中,这三者常被结合使用,以实现高效的数据筛选、格式转换和文件处理。例如,grep配合awk进行用户信息筛选,sed进行文本替换和格式调整。掌握它们,能极大提升Linux下的文本处理效率。

相似回答