当前位置: 技术问答>linux和unix
请教一个Shell脚本问题
来源: 互联网 发布时间:2016-07-31
本文导语: 比如,test文件中有如下两行: aa,bb aa 现在我想把第二行aa改为cc,但是第一行不变,应该如何做? | sed -i "2s/aa/cc/" test | 's/aa$/cc/; s/(aa)([^,])/cc2/; s/(aa),([^b])/cc,2/; s/(aa),b([^b]...
比如,test文件中有如下两行:
aa,bb
aa
现在我想把第二行aa改为cc,但是第一行不变,应该如何做?
aa,bb
aa
现在我想把第二行aa改为cc,但是第一行不变,应该如何做?
|
sed -i "2s/aa/cc/" test
|
's/aa$/cc/; s/(aa)([^,])/cc2/; s/(aa),([^b])/cc,2/; s/(aa),b([^b])/cc,b2/'
这个命令就可以,只是麻烦点~
这个命令就可以,只是麻烦点~
|
提供思路给ls的,这无非是检测一行中存在aa,bb时就不删除aa的做法,写shell实现是可以的
|
即使aa在中间也可,只要找到匹配规则,用正则表达式,sed,awk应该都可以,LZ要具体说清楚规则,最好把你的原始文件,处理后想要的结果都贴出来,大家才好帮你
|
's/aa$/cc/; s/(aa)([^,])/cc2/; s/(aa),([^b])/cc,2/; s/(aa),b([^b])/cc,b2/' 这句是可以的
这句就是一步一步的排除,本来是想用
sed 's/(aa)([^(,bb)])/cc2/' yu
(aa)匹配aa
([^(,bb)])/ 匹配非(,bb)但是实际运行发现
只能匹配存在aa且后面用偶不少于3个字符且aa后面第一个字符不是“,”我就郁闷了。
有高手帮忙看看还有没有更简单的方式。
这句就是一步一步的排除,本来是想用
sed 's/(aa)([^(,bb)])/cc2/' yu
(aa)匹配aa
([^(,bb)])/ 匹配非(,bb)但是实际运行发现
只能匹配存在aa且后面用偶不少于3个字符且aa后面第一个字符不是“,”我就郁闷了。
有高手帮忙看看还有没有更简单的方式。
|
可以换个思路,先处理特殊情况
$ cat 1.dat
aa,bb
aa
1aa
1aab
aabcc
aa,bb,bb
234aa,23421aa
$ sed -n -e '/aa,bb/d' -e 's/aa/cc/gp' 1.dat
cc
1cc
1ccb
ccbcc
234cc,23421cc
$
|
如果你能总结出规律,那么sed也能;如果你不能,请把原始文本贴出来,让大家帮你总结。