電話番号を123-123-1234から(123)123-1234および1231231234に変換するスクリプトを作成する必要があります。 trコマンドを使用してハイフンのすべてのインスタンスを変更できますが、どちらか一方を変更するにはどうすればよいですか?このコードで2番目の部分を実行しました。
echo "Enter phone number (xxx-xxx-xxxx)"
read phone
echo $phone | cat > phone
tr -d "-" < phone
より良い方法があることを知っていますが、私は新入生であり、まだそれを知りません。助けてくれてありがとう。
ベストアンサー1
タイトル(「複数の文字があるときに文字列の文字を変更する方法」)は試したソリューションですが、実際の問題は質問の本文に記載されています。比較するXYの問題。私の答えは体についてです。
IFS=- read n1 n2 n3
これはそれぞれユーザー入力n1
とn2
変数のフラグメントで埋められます。n3
- 最初の前に
-
、 - 最初
-
と2番目の間-
、 - 2文字目以降
-
(残りの-
文字を含む)。
printf
その後、任意の形式で印刷できます。
printf '(%s) %s-%s\n' "$n1" "$n2" "$n3"
printf '%s%s%s\n' "$n1" "$n2" "$n3"
欲しいかもしれませんあなたが受け入れるものに対して自由に行動します。そして厳格なフォーマットは必要ありません。シェル機能の例:
get_phone_number() {
IFS= read -rp "Enter phone number (10 digits; additional dashes, spaces, whatever allowed): " p || return 1
# remove non-digits
p="$(tr -dc '0123456789' <<< "$p")"
# check if there is 10 of them
if [ "${#p}" -ne 10 ]; then
echo "Wrong number of digits. Aborting." >&2; return 2
else
n1="${p:0:3}"
n2="${p:3:3}"
n3="${p:6:4}"
fi
}
を呼び出しますget_phone_number
。関数が成功したら、上記のように、または目的の方法でおよびを$n1
使用します。$n2
$n3
printf