Chinaunix

标题: 关于字符串替换的问题 [打印本页]

作者: cystudio    时间: 2006-08-02 20:16
标题: 关于字符串替换的问题
数据文件:
fjdklfew[12543]nrdrfne[45432]
ew[26543]kjyht[76532]gewofvwow

怎么样把[]内的数字中间三位替换成*号

fjdklfew[1***3]nrdrfne[4***2]
ew[2***3]kjyht[7***2]gewofvwow

shell初学者。。。大家给点思路,帮我写个大概~~
作者: chinadjzh    时间: 2006-08-03 13:28
低手想法:
先确定‘[’和‘]’在行中的位置a,b,再把a后面的第三个数字到b前面的第3个数字改为*,这样行吗?
还有更方便的方法吗??
作者: ruifox    时间: 2006-08-03 15:01
awk  ' BEGIN {FS="[";OFS="["}
{ sub(substr($2,2,3),"***",$2);
  sub(substr($3,2,3),"***",$3);
print $0;
} ' file

如果有更多的需要替换:

sub(substr($4,2,3),"***",$4);
。。。
作者: 寂寞烈火    时间: 2006-08-03 15:15
不嫌麻烦麻烦可以这样

  1. awk --posix '{gsub(/\[[0-9]{1}/,"& ");gsub(/[0-9]{1}]/," &");gsub(/[0-9]{3}/,"\*\*\*");gsub(/ \*/,"\*");gsub(/\* /,"\*");print}' filename
复制代码

作者: ruifox    时间: 2006-08-03 15:26
原帖由 寂寞烈火 于 2006-8-3 15:15 发表
不嫌麻烦麻烦可以这样
[code]
awk --posix '{gsub(/\[[0-9]{1}/,"& ";gsub(/[0-9]{1}]/," &";gsub(/[0-9]{3}/,"\*\*\*";gsub(/ \*/,"\*";gsub(/\* /,&quo ...


晕!满天都是小星星!
作者: 寂寞烈火    时间: 2006-08-03 15:31
原帖由 ruifox 于 2006-8-3 15:26 发表


晕!满天都是小星星!

哈哈~
作者: cuci    时间: 2006-08-03 15:38
原帖由 ruifox 于 2006-8-3 15:26 发表


晕!满天都是小星星!


强,终于有人用这么美得意境来形容shell了
作者: zh57469    时间: 2006-08-03 15:56
sed 's/\(^.*\[.\)...\(.\].*\[.\)...\(.\].*$\)/\1***\2***\3/g' file
作者: jackyhe    时间: 2006-08-03 16:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: jackyhe    时间: 2006-08-03 16:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: cystudio    时间: 2006-08-03 17:09
看的我头都昏了。。。。
先谢谢大家了
不过我是新手,大家回答的时候能否稍微加点注释,说明一下
不然我看起来实再很郁闷的~~~

另外有个情况我忘说了,如果有些没[]来分隔的话怎么实现

fjdklfew[12543]nrdrfne45432
ew26543kjyht[76532]gewofvwow

输出
fjdklfew[1***3]nrdrfne4***2
ew2***3kjyht[7***2]gewofvwow
作者: zh57469    时间: 2006-08-03 17:25
原帖由 cystudio 于 2006-8-3 17:09 发表
看的我头都昏了。。。。
先谢谢大家了
不过我是新手,大家回答的时候能否稍微加点注释,说明一下
不然我看起来实再很郁闷的~~~

另外有个情况我忘说了,如果有些没[]来分隔的话怎么实现

fjdklfew[12543] ...

sed 's/\(^.*[0-9]\)...\([0-9].*[0-9]\)...\([0-9].*$\)/\1***\2***\3/g'
作者: 寂寞烈火    时间: 2006-08-03 17:26
加上几个字符:
/home/lee #cat txt
fjdklfew[12543]nrdrfne45432
ew26543kjyht[76532]gewofvwow

  1. /home/lee #awk --posix '{gsub(/[^0-9][0-9]{1}/,"& ");gsub(/\[[0-9]{1}/,"& ");gsub(/[0-9]{1}]/," &");gsub(/ [0-9]{3}/,"\*\*\*");gsub(/ \*/,"\*");gsub(/\* /,"\*");print}' txt
复制代码
fjdklfew[1***3]nrdrfne4***2
ew2***3kjyht[7***2]gewofvwow
/home/lee #





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2