我需要编写一个脚本来将电话号码从 123-123-1234 转换为 (123) 123-1234 和 1231231234。我可以使用 tr 命令更改连字符的所有实例,但如何仅更改两个中的一个?我用这段代码做了第二部分
echo "Enter phone number (xxx-xxx-xxxx)"
read phone
echo $phone | cat > phone
tr -d "-" < phone
Run Code Online (Sandbox Code Playgroud)
我知道有更好的方法,但我是一个新学生,只是还不知道,在此先感谢您的帮助
标题(“当字符串中有多个字符时,如何仅更改一个字符?”)是您尝试的解决方案,但实际问题在问题正文中进行了解释。比较XY 问题。我的回答是针对身体的。
IFS=- read n1 n2 n3
Run Code Online (Sandbox Code Playgroud)
这将填充n1,n2并n3与用户输入的片段变量; 分别:
-,-和第二个之间-,-(包括剩余的-字符,如果有的话)。然后你可以用printf你想要的任何格式打印它们,例如
printf '(%s) %s-%s\n' "$n1" "$n2" "$n3"
printf '%s%s%s\n' "$n1" "$n2" "$n3"
Run Code Online (Sandbox Code Playgroud)
您可能希望在您接受的内容方面保持自由,而不需要严格的格式。一个作为shell函数的例子:
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
}
Run Code Online (Sandbox Code Playgroud)
调用get_phone_number. 如果函数成功,则使用$n1, $n2and $n3with printf(如上)或以任何您想要的方式。
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |