Chinaunix

标题: sed 正则表达式匹配,如何匹配行起始位置的模式? [打印本页]

作者: sunfeii    时间: 2011-10-10 14:11
标题: sed 正则表达式匹配,如何匹配行起始位置的模式?
打个比方,一段文本中的某一行,如下

777798567    aaaa897897890  bbb87978879    7865765744ttuyu

我想把不在行首的数字串的最后四位替换成0000,替换完应该是

777798567    aaaa897890000  bbb87970000    7865760000ttuyu

sed -r 's/([0-9]{3,})[0-9]{4}/\10000/g' filenme > new_file

这样的话就变成

777790000   aaaa897890000  bbb87970000    7865760000ttuyu

可是我不想匹配行首的数字串,咋办呢?
作者: lw_987    时间: 2013-07-07 12:25
前面添加:grep '^[^0-9]'
作者: wang1352083    时间: 2013-07-08 12:01
用()分组,将第一组数字去掉
作者: sk1418    时间: 2013-07-12 04:27
lw_9xx 的办法对你这行好用,但不通用。


你就直接用awk不就省事多了吗
  1. kent$  echo "777798567    aaaa897897890  bbb87978879    7865765744ttuyu"|awk '{for(i=2;i<=NF;i++)sub(/[0-9]{4}$/,"0000",$i)}1'
  2. 777798567 aaaa897890000 bbb87970000 7865765744ttuyu
复制代码

作者: moperyblue    时间: 2016-10-07 13:45

  1. sed -r 's/(\<[^0-9]+\S*)\S{4}/\10000/g'
复制代码





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