shell脚本以不同方式打印三个单词我试过
{
a="Uname/pass@last"
echo $a | tr "/" "\n" | tr "@" "\n"
output is:
Uname
pass
last
}
我希望它为
{Username- Uname
Password- pass
lastname-last}
答案 0 :(得分:1)
好的,我想你想为每个结果添加一个前缀:
printf 'Username\nPassword\nlastname' > /tmp/prefixes
a="Uname/pass@last"
echo "${a}" | tr '/@' '\n\n' | paste -d':' /tmp/prefixes -
ie:将/tmp/prefixes
和标准输入(-
)的输出粘贴在一起,该输出接收输出:echo ".../...@..." | tr '/@' '\n\n'
(在结果输出中,在此示例中将2与:
分开,或者您想要的任何其他内容。例如:-
就像您的问题一样。)
并输出:
Username:user
Password:pass
lastname:last
(我知道您想要一个-
而不是:
,但我将我的示例与:
分开以更好地区分" - "表示标准输入,":"表示输出中的字段分隔符。只需将-d':'
更改为-d'-'
即可改为-
。)
答案 1 :(得分:0)
首先,我希望你不要在shell脚本和外部命令中操纵重要的密码。这涉及到一些风险。
我怀疑你想要将用户的用户名,密码和姓氏的字符串拆分成三行结构,向文档添加标签是哪个。为此,tr
不足。
但是,它可以在shell中完成。
function split_account_string {
typeset account=${1:?account string} uname pass last t
uname=${account%%/*}
last=${account##*@}
t=${account#$uname/}
pass=${t%@*}
[[ $uname/$pass@$last == "$account" ]] || return
echo "{Username-$uname"
echo "Password-$pass"
echo "lastname-$last}"
}
split_account_string "USER_A/seKreT@John.Doe"
此函数将提取第一个 /
和 last @
之间的所有标记作为密码值。如果缺少任何一个,它将不打印任何内容,并返回错误状态。
运行时,这会给出:
{Username-USER_A
Password-seKreT
lastname-John.Doe}
答案 2 :(得分:0)
使用这个简单的脚本并获取输出。
#!/bin/bash
a="Uname/pass@last"
array2=(`echo $a | tr "/" "\n" | tr "@" "\n"`)
array1=(`echo -e "Username\nPassword\nlastname"`)
i=${#array1[@]}
for (( j=0 ; j<$i ; j++ ))
do
echo "${array1[$j]}=${array2[$j]}"
done