LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 947|回复: 6

正则表达式问题,请帮忙

[复制链接]
发表于 2007-12-7 11:51:05 | 显示全部楼层 |阅读模式
原来的文本内容
AM_FLAGS=-g -debug
APP1_FLAGS=-g -debug
APP2_FLAGS=-g -debug
XX1_FLAGS=-g -debug
XM_FLAGS=-g -debug

需要得到:
AM_FLAGS=-g -debug
APP1_FLAGS= xx-g -debug
APP2_FLAGS=xx-g -debug
XX1_FLAGS=xx-g -debug
XM_FLAGS=xx-g -debug

希望:用正则表达式完成
目的:就是FLAGS前面不是AM的所有行都在后面加字符串xx
发表于 2007-12-7 13:10:07 | 显示全部楼层
  1. sed '/^AM/!s/=/=xx /'
复制代码
是需要出现这样的结果吗?

操作,如果行首不是AM,就在=号后面加上xx
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-7 13:11:29 | 显示全部楼层
行首不是AM,并且接下来不是"_FLAGS"的进行替换
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-7 13:27:06 | 显示全部楼层
行首不是AM,并且接下来是"_FLAGS"的进行替换
回复 支持 反对

使用道具 举报

发表于 2007-12-7 19:06:49 | 显示全部楼层
  1. sed '/^AM/!{/^[^_]\+_FLAGS/s/=/=xx /}'
复制代码

解释:
/^AM/{...}  当行首出现AM的时候,开始做{}内的命令

/^[^_]\+_FLAGS/s/=/=xx /
/^[^_]\+_FLAGS/  表示匹配从行首开始,连续的一个或多个不为_的字符,然后后面紧跟着_FLAGS这串字符。(\+是转义符,最终在正则表达式中就是+,表示最少匹配一次)
如果匹配上,就把第一个=换成=xx
回复 支持 反对

使用道具 举报

发表于 2007-12-9 18:34:38 | 显示全部楼层
Post by springwind426;1792870
  1. sed '/^AM/!{/^[^_]\+_FLAGS/s/=/=xx /}'
复制代码

来解释一下
/^AM/来查找行首是AM的行
!表示后面的命令对所有没有被选定的行发生作用。
s/=/=xx / 这个就是把=替换成=XX
/^[^_]\+_FLAGS/
这句就比较困惑了 查找行首不是_开头的后面跟\可以是0或1个再后面是_FLAGS
不知道我说的对不对 ,最好是把这句给解释一下
回复 支持 反对

使用道具 举报

发表于 2007-12-10 21:08:30 | 显示全部楼层
你试试这个,现在不在linux下,不保证一定对啊,呵
sed  '/^AM/ s/-g/xx-g/g'  filename
看看结果,怪怪的,回头我试试再回复啊
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表