jerry_cym 发表于 2005-4-27 10:01:17

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

if(a)
echo "abc";
if(b)
echo "abc";


比如这个文件有这些内容,我现在想把第二行的abc替换成cba,前提是文件里内容和位置不可变动,请高手指教.

zhy2111314 发表于 2005-4-27 10:38:41

这个实现起来方法很多,下面提供一种思路,就是利用sed,这也是sed的基本用法:
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$

想多了解关于sed,就看看:
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=112296

jerry_cym 发表于 2005-4-27 10:53:22

这个办法是不错,谢了,但是我现在有这个问题,如果我想替换第二行的abc为bca,但我们都不知道这个abc所在的行只知道他上面一行的内容,那又该怎么做那?

zhy2111314 发表于 2005-4-27 11:15:40

暂时想了个笨方法,先看看:
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$

jerry_cym 发表于 2005-4-27 15:44:49

a=$((`sed -n '/if(a)/=' re`+1))|sed -e "$a"s/abc/bca/g re
这条命令我怎么不行啊,一打这条命令就跳到下一行,出现>

BOoRFGOnZ 发表于 2005-4-27 19:09:11

>是SP2(第二提示符) :-D
这证明你的输入没有结束(看看漏掉什么了)

watch_1394 发表于 2005-4-27 19:51:15

sed的参数N、P这些可以实现你的要求,不过就是麻烦了点。
页: [1]
查看完整版本: 关于正则表达式与上面一行匹配的问题?