Bashで数字をアスタリスクに置き換えます。

Bashで数字をアスタリスクに置き換えます。

たとえば、次のような数値があります。

123456789

4-8をアスタリスクに変えたいです。

123****89

答え1

文字列を正確に置き換えるには、次のように4567します。

echo '123456789' | sed 's/4567/****/'
echo '123456789' | awk 'gsub("4567","****",$0)'

4-7範囲に表示される数字を置き換えるには、次のようにします。

echo '123456789' | sed 's/[4567]/*/g'
echo '123456789' | awk 'gsub(/[4567]/,"*",$0)'

答え2

位置4から8までの文字範囲を変更します(除外)。

sed -E 's/(...).{4}/\1****/' <<<"123456789" 
123****89

  • (...)- 最初の角かっこグループにキャプチャされた最初の3文字
  • .{4}- 交換する次の4文字

答え3

私たちはBashについて話しているので、他の利用可能な演算子を使いたいかもしれません。パラメータ拡張:

4567文字列をに置き換えますか****

$ var=abcdefghi123456789
$ echo "${var/4567/****}"
abcdefghi123****89

4それともアスタリスクのある数字ですか7

$ var=-3-4-5-6-7-8-
$ echo "${var//[4-7]/*}"
-3-*-*-*-*-8-

それとも4から7までの文字が何でも構いませんか?

$ var=abcdäöäö
$ echo "${var:0:3}****${var:7}"
abc****ö

${var:n:m}${var:pattern:repl}部分文字列の拡張または置換はPOSIX機能ではありませんが、ほとんどのシェルはそれをサポートしています。

答え4

次の3つの方法が機能します。

  1. echo "123456789" | sed "s/\(...\)\(....\)/\1\****/g"
    
  2. echo "123456789" | sed "s/\(...\)\([0-9]\{5\}\)/\1\****/g"
    
  3. echo "123456789" | sed "s/[^12389]/*/g"
    

出力

123****89

関連情報