免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何根据特定字符串修改后面字符串信息 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2020-02-26 14:41 |只看该作者 |倒序浏览
如何根据特定字符串如下aaa不区分大小写,把后面的字符串加上bbb.,如果有bbb.或者xxx.这类的就保持不变

xxxxxxxxxxxx
xxxxx
aaa bbb.ccc

aaa qqq.ccc

xxx xxx aaa ddd

aAA eee

xxxx aaA ddd

xx aaa

xxx
aaa

eee.ccc
aaa eeee

变成

xxxxxxxxxxxx
xxxxx
aaa bbb.ccc

aaa qqq.ccc

xxx xxx aaa bbb.ddd

aAA bbb.eee

xxxx aaA bbb.ddd

xx aaa

bbb.xxx
aaa

eee.ccc

aaa bbb.eeee



论坛徽章:
0
2 [报告]
发表于 2020-02-26 15:55 |只看该作者
  1. $ cat a.txt
  2. xxxxxxxxxxxx
  3. xxxxx
  4. aaa bbb.ccc

  5. aaa qqq.ccc

  6. xxx xxx aaa ddd

  7. aAA eee

  8. xxxx aaA ddd

  9. xx aaa

  10. xxx
  11. aaa

  12. eee.ccc
  13. aaa eeee
复制代码
你这不区分大小写和前向断言真的好蛋疼:
  1. $ grep -Pion 'aaa (?!(bbb\.|xxx\.| *$))' a.txt|awk -F: '{a[$1]=$2}END{while(getline <"a.txt" >0){n++;if(n in a)gsub(a[n],a[n]"bbb.",$0);print}}'
  2. xxxxxxxxxxxx
  3. xxxxx
  4. aaa bbb.ccc

  5. aaa bbb.qqq.ccc

  6. xxx xxx aaa bbb.ddd

  7. aAA bbb.eee

  8. xxxx aaA bbb.ddd

  9. xx aaa

  10. xxx
  11. aaa

  12. eee.ccc
  13. aaa bbb.eeee
复制代码



论坛徽章:
1
19周年集字徽章-年
日期:2020-10-29 09:39:21
3 [报告]
发表于 2020-02-27 08:22 |只看该作者
你开头讲的要求,跟你给出的示例根本不是一回事啊。按你开头讲的:
perl -pe's#aaa \K(?!.*(bbb|xxx)\.)#bbb.#gi' file

你示例中:aaa qqq.ccc这一行并未包含bbb.也没包含xxxx.你却没有动这一行。然后你所有的原有的大小写a,全变成小写的a了,开头也未说明。

评分

参与人数 1可用积分 +20 收起 理由
飘絮絮絮丶 + 20 赞一个!

查看全部评分

论坛徽章:
0
4 [报告]
发表于 2020-02-27 13:45 |只看该作者
其实只用sed也不是不行:
  1. sed -r '/aaa (bbb|xxx)\.|aaa $/!s/aaa /&bbb./gi' a.txt

  2. xxxxxxxxxxxx
  3. xxxxx
  4. aaa bbb.ccc

  5. aaa bbb.qqq.ccc

  6. xxx xxx aaa bbb.ddd

  7. aAA bbb.eee

  8. xxxx aaA bbb.ddd

  9. xx aaa

  10. xxx
  11. aaa

  12. eee.ccc
  13. aaa bbb.eeee
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP