一个shell脚本关于sed替换的问题,求高手解答

2024-10-29 13:29:37
推荐回答(3个)
回答1:

用管道符实现此功能

[root@localhost ~]# cat file

name = zhangsan

name = lisi

name = root

name=zhangsan

name=lisi

name=root

[root@localhost ~]# sed 's/name = zhangsan/name = wangwu/g' file |  sed 's/name = lisi/name = wangwu/g' | sed 's/name=zhangsan/name=wangwu/g' |  sed 's/name=lisi/name=wangwu/g'

name = wangwu

name = wangwu

name = root

name=wangwu

name=wangwu

name=root

回答2:

这个只能详细寻问楼主的诉求。

楼主要做的是否是:
将以 name = **** 这样的内容换成 name=wangwu 这个内容。其中 name = 的等号前后的空格可有可无,而 **** 的内容我们不需要关注,只需统一替换成 wangwu 即可。

是这样么?

回答3:

想了一下, 也不知道你参数那些固定与否都不知道, 匹配也很麻烦,
本来你这行语句也不复杂,所幸你全部都替换得了, 这样处理最直接.
演示如下:

[root@agent ~]# more file.txt
aaaaaaaaaaaaaaa
bbbbbbbbbbb
cccccccccc
action=-i hehe -j haha -l
ddddddd
[root@agent ~]# sed '/action=/c\action=-i para1 -j para2 -l' file.txt
aaaaaaaaaaaaaaa
bbbbbbbbbbb
cccccccccc
action=-i para1 -j para2 -l
ddddddd
[root@agent ~]#

实现了你所说的要求了吧~
如果你觉得这个麻烦,你可以把这个语句写一个小脚本,para1和para2用$1,$2替换
脚本如下:
#!/bin/bash
#sed_replace.sh

sed '/action=/c\action=-i $1 -j $2 -l' $3 ($3 表示你将操作的文件)
执行情况如下:
[root@agent ~]#sh sed_replace.sh para1 para2 file.txt > output.txt
[root@agent ~]#more output.txt
aaaaaaaaaaaaaaa
bbbbbbbbbbb
cccccccccc
action=-i para1 -j para2 -l
ddddddd

------------------------------------------------------
闲着没事,详细的跟你解答了~~望采纳
副食店发生大