1

procmail レシピを介してファイルからフィルタリングされた電話番号のリストを含むファイル call phonenum.txt があります。

60123456098,60135673434,60149023459,60123456334

このファイルに基づいて、出力を取得するために満たす必要がある 2 つの条件があります。

  1. 出力は、番号 60 (国コードであるため、すべての番号の間で使用できる唯一の定数) と、これらの番号の前にある "," 記号で区別する必要があります。例: 60135673434 ..
  2. 番号 60 が電話番号の真ん中にある場合はどうなりますか? 例: 60123456098 整数の出力を取得するにはどうすればよいですか?

awkまたはsedで一致正規表現を使用して電話番号を取得できる方法はありますか?

4

5 に答える 5

1

できるよ

awk -v RS="," '{gsub(/^60/,"")} 1' file

1行戻したい場合

awk -v RS="," '{gsub(/^60/,"")} {printf s $0; s=","}' file
于 2012-12-31T13:28:16.630 に答える
1
awk -F, '{for(i=1;i<=NF;i++)if($i~/^60/){print "phone number is ",substr($i,3)}}' your_file

以下でテスト:

> cat temp
60123456098,60135673434,60149023459,60123456334,90123456789
> nawk -F, '{for(i=1;i<=NF;i++)if($i~/^60/){print "phone number is ",substr($i,3)}}' temp
phone number is  123456098
phone number is  135673434
phone number is  149023459
phone number is  123456334
>
于 2012-12-31T10:28:52.087 に答える
0

sedを使用したグローバル置換はどうですか(^|,)60

$ sed -r 's/(^|,)60/\1/g' <<< 60123456098,60135673434,60149023459,60123456334 
123456098,135673434,149023459,123456334

再説明:

s/          # Substitution 
(^|,)       # Match start of the line or comma (captured)
60          # Followed by the literal 60 
/           # Replace with
\1          # Captured group (put back the comma) 
/g          # Global flag
于 2012-12-31T13:47:02.750 に答える
0

これはうまくいくかもしれません(GNU sed):

sed 's/^60//;s/,60/\n/g;P;D' file
于 2013-01-02T18:51:00.170 に答える
0
$ grep -oP '(?<=\b60)\d+' <<< "60123456098,60135673434,60149023459,60123456334"
123456098
135673434
149023459
123456334
于 2012-12-31T14:54:49.877 に答える