请教一个Shell脚本问题

wj8106 2010-01-14 01:49:34
比如,test文件中有如下两行:
aa,bb
aa
现在我想把第二行aa改为cc,但是第一行不变,应该如何做?
...全文
255 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgm850401 2010-01-21
  • 打赏
  • 举报
回复
路过顶一下
dawnmaster 2010-01-19
  • 打赏
  • 举报
回复
提供思路给ls的,这无非是检测一行中存在aa,bb时就不删除aa的做法,写shell实现是可以的
yanxu_1234 2010-01-18
  • 打赏
  • 举报
回复
顶12楼
sha___chen 2010-01-17
  • 打赏
  • 举报
回复
's/aa$/cc/; s/\(aa\)\([^,]\)/cc\2/; s/\(aa\),\([^b]\)/cc,\2/; s/\(aa\),b\([^b]\)/cc,b\2/'

这个命令就可以,只是麻烦点~
ljc007 2010-01-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wj8106 的回复:]
是这样的,我想替换的那串字符刚好在行尾,所以可以加$符解决,但是我在想如果要是这个字符串在行中间该怎么办?
[/Quote]

如果你能总结出规律,那么sed也能;如果你不能,请把原始文本贴出来,让大家帮你总结。
lylm 2010-01-15
  • 打赏
  • 举报
回复
即使aa在中间也可,只要找到匹配规则,用正则表达式,sed,awk应该都可以,LZ要具体说清楚规则,最好把你的原始文件,处理后想要的结果都贴出来,大家才好帮你
steptodream 2010-01-15
  • 打赏
  • 举报
回复
通过脚本就是针对特定的文件进行特定的操作
文件变了 要实现的效果变了 当然实现的方法就不一样
一句sed实现不了 多句可以实现 或者再引入awk一样别的工具 只是越来越复杂而又

比如要是一行是这样的 aa,bb,eedf,aa,aa
你还要把这行换成cc吗?
wj8106 2010-01-15
  • 打赏
  • 举报
回复
是这样的,我想替换的那串字符刚好在行尾,所以可以加$符解决,但是我在想如果要是这个字符串在行中间该怎么办?
yifanernei 2010-01-15
  • 打赏
  • 举报
回复
可以换个思路,先处理特殊情况

$ 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
$
sha___chen 2010-01-15
  • 打赏
  • 举报
回复
's/aa$/cc/; s/\(aa\)\([^,]\)/cc\2/; s/\(aa\),\([^b]\)/cc,\2/; s/\(aa\),b\([^b]\)/cc,b\2/' 这句是可以的

这句就是一步一步的排除,本来是想用
sed 's/\(aa\)\([^(,bb)]\)/cc\2/' yu
\(aa\)匹配aa
\([^(,bb)]\)/ 匹配非(,bb)但是实际运行发现
只能匹配存在aa且后面用偶不少于3个字符且aa后面第一个字符不是“,”我就郁闷了。
有高手帮忙看看还有没有更简单的方式。
HULIHONG 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wj8106 的回复:]
谢谢!用这个办法我的问题可以解决。

不过我还是想不出来,如果aa不是开始或结尾的字符串该怎么办呢?
[/Quote]

这样的话,应该满足不了你的要求的。
wj8106 2010-01-14
  • 打赏
  • 举报
回复
谢谢!用这个办法我的问题可以解决。

不过我还是想不出来,如果aa不是开始或结尾的字符串该怎么办呢?
steptodream 2010-01-14
  • 打赏
  • 举报
回复
sed -i "s/^aa$/cc/" test
wj8106 2010-01-14
  • 打赏
  • 举报
回复
把含aa的行替换成cc,但是含aa,bb的行不要受到影响
steptodream 2010-01-14
  • 打赏
  • 举报
回复
你的意思是
文本中的任意有下面2行
aa,bb
aa
就把aa替换成cc吗

还是把所有aa的行替换成cc
wj8106 2010-01-14
  • 打赏
  • 举报
回复
不好意思,没表达清楚,是在不知道行号的前提下。
steptodream 2010-01-14
  • 打赏
  • 举报
回复
sed -i "2s/aa/cc/" test

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧