Shell中的模式匹配

时间:2012-03-06 04:57:41

标签: shell unix

我的输入文字采用这种格式

 aa5b    r1     12715
 r2     12221
 aa43b   ew     13721
 eb     122331
 aa4b    ff     1055440

输出必须

aa5    r1     12715
r2    12221
aa43   ew     13721
eb  122331
aa4    ff     1055440

我试过

 awk -F " " '{print $1}' t1 | grep "^aa*" > t2|sed s/b//g t2

此代码的问题在于输入文本没有固定模式。

4 个答案:

答案 0 :(得分:1)

使用像perl和regex这样的东西会更容易:

perl -p -e 's/^(aa[0-9]+)\w+/$1/' t1 > t2

答案 1 :(得分:1)

这个版本与sed怎么样?

sed 's/^\(aa[0-9]*\)b/\1/' t1 > t2

答案 2 :(得分:1)

从您对问题的描述中不清楚规格,但如果您只想在开头'aa'的行上删除所有出现的字符'b',您可以使用:

sed '/^aa/s/b//g'

答案 3 :(得分:0)

awk ' $1 ~ /a/ { $1= substr($1,0,length($1)-1) };1' infile > outfile