たとえば、次のような数値があります。
123456789
4-8をアスタリスクに変えたいです。
123****89
答え1
答え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つの方法が機能します。
echo "123456789" | sed "s/\(...\)\(....\)/\1\****/g"
echo "123456789" | sed "s/\(...\)\([0-9]\{5\}\)/\1\****/g"
echo "123456789" | sed "s/[^12389]/*/g"
出力
123****89