免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6066 | 回复: 11
打印 上一主题 下一主题

[文本处理] 如何使用sed或awk 替换文本中包含有特殊字符//等 内容 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-20 16:34 |只看该作者 |倒序浏览
  比如文件shell.ini中包含有如下 一行 abc-efg = ["aa.tp://daylight-clear-data@127.0.0.1:2350"]。
然后想把这行替换为如下格式的: abc-efg = ["aa.tp://daylight-clear-data@127.0.0.1:2350","aa.tp://daylight-clear-data@127.0.0.2:2350","aa.tp://daylight-clear-data@127.0.0.3:2350"]. 其实主要是多添加了[]中的同一个内容,但ip不同。
求各位大侠,赐教

主要是这个里边包含了 //  这符号,经常遇到报    sed: -e expression #1, char 2: unterminated `s' command   的错误

论坛徽章:
0
2 [报告]
发表于 2015-05-20 16:55 |只看该作者
echo 'abc-efg = ["aa.tp://daylight-clear-data@127.0.0.1:2350"]' |sed -r 's/(abc-efg.*)\[(.*@)([0-9]+\.[0-9]+\.[0-9]+\.)[0-9]+(:2350\")\]/\1\[\2\31\4\,\2\32\4\,\2\33\4\]/'
abc-efg = ["aa.tp://daylight-clear-data@127.0.0.1:2350","aa.tp://daylight-clear-data@127.0.0.2:2350","aa.tp://daylight-clear-data@127.0.0.3:2350"]

是这个意思么?

论坛徽章:
23
15-16赛季CBA联赛之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午马
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16赛季CBA联赛之山东
日期:2017-12-21 16:39:1915-16赛季CBA联赛之广东
日期:2016-01-19 13:33:372015亚冠之山东鲁能
日期:2015-10-13 09:39:062015亚冠之西悉尼流浪者
日期:2015-09-21 08:27:57
3 [报告]
发表于 2015-05-20 17:04 |只看该作者
回复 1# cyyjs123


写 s 命令的时候用 #

s#xxx#ooo#

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
4 [报告]
发表于 2015-05-20 21:43 |只看该作者
回复 1# cyyjs123
这个awk写得比较戳。。。。
  1. awk --re-interval -F'[][]' -vOFS="[" '{s=$2;for(i=2;i<=3;i++){s=s","gensub(/(([0-9]+.){3})[0-9]+/,"\\1"i,1,$2)}$2=s"]";NF-=1}1' file
复制代码

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
5 [报告]
发表于 2015-05-20 23:07 |只看该作者
  1. awk '{match($0,"([^[]+)\\[(.+\\.)([0-9]+)(.+\042)",a);}END{printf a[1]"[";for(i=0;i<=2;i++){printf "%s%d%s",a[2],a[3]+i,a[4];if(i<=1)printf ","}print "]"}' file
复制代码
回复 1# cyyjs123


   

论坛徽章:
0
6 [报告]
发表于 2015-05-21 09:40 |只看该作者
回复 2# 破晓丶丘比特


大侠好厉害。和我预想的有点出入,我一开始描述不详细。在描述下:

如 shell.ini中包含的信息如下:

abc-efg = ["aa.tp://daylight-clear-data@127.0.0.1:2350"]

然后呢,我创建一个shell脚本,然后执行这脚本后呢,shell.ini中的文件内容变成了这样

abc-efg = ["aa.tp://daylight-clear-data@127.0.0.1:2350","aa.tp://daylight-clear-data@127.0.0.2:2350","aa.tp://daylight-clear-data@127.0.0.3:2350"]

脚本的执行方式:./shell.sh  ip1  ip2 ip3 shell.ini.也就是说这个ip不是固定的,每次使用参数传进去,这样方便一些

您写的这个,后面:    /\1\[\2\31\4\,\2\32\4\,\2\33\4\]/'  这部分不明白。使用不知道到如果使用参数的话,该怎么样写呢, 先谢过大侠了

论坛徽章:
0
7 [报告]
发表于 2015-05-21 10:06 |只看该作者
回复 5# zxy877298415

这个执行了一下,返回[0,1,2] ,应该不对

   

论坛徽章:
0
8 [报告]
发表于 2015-05-21 10:07 |只看该作者
回复 4# songyc_2015

执行了一次,是实现了,但是如何 能够灵活修改 这个 ip值呢,请赐教,多谢了。比如 参数传入后,直接由参数替换这其中的3个ip。

   

论坛徽章:
0
9 [报告]
发表于 2015-05-21 10:41 |只看该作者
回复 4# songyc_2015

这样还不行,会把文中多有 [。。。] 格式 这样的,都会复制修改成三份。


   

论坛徽章:
3
金牛座
日期:2015-05-27 16:03:00午马
日期:2015-05-27 16:03:212015亚冠之德黑兰石油
日期:2015-06-09 11:13:42
10 [报告]
发表于 2015-05-21 13:50 |只看该作者
回复 6# cyyjs123
sed -n 's#\("aa.tp://daylight-clear-data@127.0.0.1:2350"\)#\1,\1,\1#p'  shell.ini 这个是修改行内容的--灵活修改ip坐等大神解答

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP