当前位置: 技术问答>linux和unix
shell中处理字符
来源: 互联网 发布时间:2015-08-22
本文导语: 有这样的一个文件1.txt,每行内容有电话和地址等信息,以"|"号隔开,如下: |010-32145123|(010)56781111|office|Beijing |(021)23456789|021-1234-5678|home|Shanghai ..... 我想在shell中把电话中的不是数字的字符去掉,所得的结果应是: |01032145123|010...
有这样的一个文件1.txt,每行内容有电话和地址等信息,以"|"号隔开,如下:
|010-32145123|(010)56781111|office|Beijing
|(021)23456789|021-1234-5678|home|Shanghai
.....
我想在shell中把电话中的不是数字的字符去掉,所得的结果应是:
|01032145123|01056781111|office|Beijing
|02123456789|02112345678|home|Shanghai
请问该如何处理.
|010-32145123|(010)56781111|office|Beijing
|(021)23456789|021-1234-5678|home|Shanghai
.....
我想在shell中把电话中的不是数字的字符去掉,所得的结果应是:
|01032145123|01056781111|office|Beijing
|02123456789|02112345678|home|Shanghai
请问该如何处理.
|
在shell里好像不好做啊。。。 用C可能更容易些。
|
sed 's/(//g;s/)//g' 1.txt > 2.txt
呵呵,笨法子
呵呵,笨法子
|
sed -e 'h
s:|(.*)|(.*)|(.*)|(.*):|1|2:
s:[^0-9,|]::g
G
s:|(.*)|(.*)n|(.*)|(.*)|(.*)|(.*):|1|2|5|6:'
s:|(.*)|(.*)|(.*)|(.*):|1|2:
s:[^0-9,|]::g
G
s:|(.*)|(.*)n|(.*)|(.*)|(.*)|(.*):|1|2|5|6:'
|
呵呵,用 sed 不行的,因为这样的话,如果地址等不是电话的域里面包含有‘(’、‘-’等字符,也会被替换掉的,得用 awk 才行,试试这样:
awk -F'|' '{gsub(/[^0-9]/,"",$2);gsub(/[^0-9]/,"",$3);print $0}' 1.txt | sed 's/ /|/g'
我在linux下面试过的!
awk -F'|' '{gsub(/[^0-9]/,"",$2);gsub(/[^0-9]/,"",$3);print $0}' 1.txt | sed 's/ /|/g'
我在linux下面试过的!
|
acm的题吧?