すべての社会保障番号シーケンスのすべての番号を変更する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