すべての社会保障番号(SSN)番号をXに置き換えます。

すべての社会保障番号(SSN)番号をXに置き換えます。

すべての社会保障番号シーケンスのすべての番号を変更するsedコマンドが必要です(形式は次のとおりです)。123-45-6789またはこれ123456789)Xで。フォーマットされた2つの例のうちの1つとまったく同じではない一連の数字は、sedこのコマンドの影響を受けません。数値の順序はすべて1つに統合されています。情報.txt文書。

情報.txtおおよそ次のようになります。

id093: 888-88-8888
id094: 333-33-3333
id095: 123456789
id096: 987654321
This next number shouldn't be converted to X's 0123456789 nor this one 0987-65-4321

(でこのページを表示します。http://www.computerhope.com/unix/used.htm)「sコマンド」で次の形式を使用する必要があることを知っています。

sed –i 's/regularexpression(s)/replacement/g' info.txt

前述の2つの形式に準拠する数字だけが影響を受けるように(ハイフンは維持しながら)、regular expression(s)部分の形式を指定する方法がわかりません。replacement

答え1

sedすでにGNU(-i拡張)を使用しているようです。

sed -ri ':1
         s/(^|[^-0-9])[0-9]{3}-[0-9]{2}-[0-9]{4}([^-0-9]|$)/\1XXX-XX-XXXX\2/g
         s/(^|[^-0-9])[0-9]{9}([^-0-9]|$)/\1XXXXXXXXX\2/g
         t1' your-file

(BSDにsed置き換え)-ri-Ei ''

dddddddddつまり、ddd-dd-dddd前後に10進数またはハイフンがない場合は、合計を変換します。

そしてperl(GNUからsed借りた-i):

perl -pi -e 's{(?<![\d-])(\d{3}-\d\d-\d{4}|\d{9})(?![\d-])}{
  $& =~ s/\d/X/gr}eg' your-file

関連情報