QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1233|回复: 6

关于正则表达式与上面一行匹配的问题?

[复制链接]
发表于 2005-4-27 10:01:17 | 显示全部楼层 |阅读模式
if(a)
echo "abc";
if(b)
echo "abc";


比如这个文件有这些内容,我现在想把第二行的abc替换成cba,前提是文件里内容和位置不可变动,请高手指教.
发表于 2005-4-27 10:38:41 | 显示全部楼层
这个实现起来方法很多,下面提供一种思路,就是利用sed,这也是sed的基本用法:
[code:1]zhyfly@zhyfly:~/bash$ cat re
if(a)
echo "abc";
if(b)
echo "abc";
zhyfly@zhyfly:~/bash$ sed -e '2s/abc/cba/g' re
if(a)
echo "cba";
if(b)
echo "abc";
zhyfly@zhyfly:~/bash$
[/code:1]
想多了解关于sed,就看看:
http://www.linuxfans.org/nuke/mo ... ic&t=112296
回复

使用道具 举报

 楼主| 发表于 2005-4-27 10:53:22 | 显示全部楼层
这个办法是不错,谢了,但是我现在有这个问题,如果我想替换第二行的abc为bca,但我们都不知道这个abc所在的行只知道他上面一行的内容,那又该怎么做那?
回复

使用道具 举报

发表于 2005-4-27 11:15:40 | 显示全部楼层
暂时想了个笨方法,先看看:
[code:1]zhyfly@zhyfly:~/bash$ cat re
if(a)
echo "abc";
if(b)
echo "abc";
zhyfly@zhyfly:~/bash$ a=$((`sed -n '/if(a)/=' re`+1))|sed -e "$a"s/abc/bca/g re
if(a)
echo "bca";
if(b)
echo "abc";
zhyfly@zhyfly:~/bash$
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2005-4-27 15:44:49 | 显示全部楼层
a=$((`sed -n '/if(a)/=' re`+1))|sed -e "$a"s/abc/bca/g re
这条命令我怎么不行啊,一打这条命令就跳到下一行,出现>
回复

使用道具 举报

发表于 2005-4-27 19:09:11 | 显示全部楼层
>是SP2(第二提示符)
这证明你的输入没有结束(看看漏掉什么了)
回复

使用道具 举报

发表于 2005-4-27 19:51:15 | 显示全部楼层
sed的参数N、P这些可以实现你的要求,不过就是麻烦了点。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-3 02:34 , Processed in 0.113963 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

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