Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2314813
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: LINUX

2008-08-11 21:23:51

cat tmp.txt
==============
1234    1234
1234
1234
1234
==============
希望只替换第一个出现的 1234为abc, 其它的都不替换

方法一:sed
sed '/1234/{s/1234/abc/;:skip n;b skip;}' tmp.txt

方法二:awk

awk 'ok ==0 && /1234/{ sub(/1234/,"abc");print; ok = 1; next; } (ok == 1){print}' tmp.txt


以上命令是在一同一行中。

方法三: perl

perl -e 'undef $/;my $a=<>;$a=~s/1234/abc/s;print $a;' < tmp.txt


方法四: bash

bash要版本3以上才支持regex(7)的正则表达式, 但对这个简单的例子也足够了。不知道的复杂的正则表达式能否支持:

ok=0;

while read -r l;

do

   if [[ "$l" =~ "1234" && $ok == 0 ]] ;then

      l="${l/1234/abc}";ok=1;

   fi;

   echo "$l";

done


方法五: vim

let g:first = 0

function! Tmp(src, dest)

   if g:first == 0

     let g:first=1

     return a:dest

   endif

   return a:src

endfunction


%s#1234#\=Tmp(submatch(0), 'abc')#g

阅读(1080) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~