0

テキスト ファイルから、長さ 3/4 の数字のすべてのインスタンスを「*」でマスクする sed コマンドを作成しようとしています。私はこれを持っています:

s/[0-9]\{4\}/\*\*\*\*/g
s/[0-9]\{3\}/\*\*\*/g

これはそれを行いますが、より長い数値文字列から最初の 3/4 文字をマスクします。

長さ 3 と 4 の文字列をマスクする方法はありますか。数字はテキストの一部である可能性もあります。

私は sed を初めて使用し、ドキュメントを読み込もうとしましたが、必要なものを削除するのに苦労しています。

前もって感謝します!

4

1 に答える 1

0

入力例を挙げていない場合は、これを試して、役立つかどうかを確認してください。

sed -r 's/\b[0-9]{3}\b/***/g;s/\b[0-9]{4}\b/****/g' file

例:

kent$  echo "111
1234567
111 1111 12ab 1111a                                        
11 1111 1"|sed -r 's/\b[0-9]{3}\b/***/g;s/\b[0-9]{4}\b/****/g'
***
1234567
*** **** 12ab 1111a
11 **** 1

ところで、3 つの数字を3つの星に、4 つの数字を4つの星に置き換えますか?

編集

sed -r 's/([^0-9]|\b)[0-9]{3}([^0-9]|\b)/\1***\2/g;s/(\b|[^0-9])[0-9]{4}(\b|[^0-9])/\1****\2/g' file

テスト(OPの例付き)

kent$  echo "111
1234567
111 1111 12ab 1111a
11 1111 1
 fhdjs777ssaa"|sed -r 's/([^0-9]|\b)[0-9]{3}([^0-9]|\b)/\1***\2/g;s/(\b|[^0-9])[0-9]{4}(\b|[^0-9])/\1****\2/g'    
***
1234567
*** **** 12ab ****a
11 **** 1
 fhdjs***ssaa

この行は に置き換えfoo123barられますが、同じfoo***barままになります。foo123456bar

于 2013-03-28T11:23:41.770 に答える