在shell脚本中打印用特殊字符分隔的单词

在shell脚本中打印用特殊字符分隔的单词,shell,Shell,shell脚本以不同的方式打印三个单词我已经尝试过了 { a="Uname/pass@last" echo $a | tr "/" "\n" | tr "@" "\n" output is: Uname pass last } 我想把它当作 {Username- Uname Password- pass lastname-last} 好的,我想您应该为每个结果添加一个前缀: printf 'Username\nPassword\nlastname' > /tmp/prefixes

shell脚本以不同的方式打印三个单词我已经尝试过了

{ 
a="Uname/pass@last"
echo $a | tr "/" "\n" | tr "@" "\n"
output is:
Uname
pass
last
}
我想把它当作

{Username- Uname
Password- pass
lastname-last}

好的,我想您应该为每个结果添加一个前缀:

printf 'Username\nPassword\nlastname' > /tmp/prefixes

a="Uname/pass@last"
echo "${a}" | tr '/@' '\n\n' | paste -d':' /tmp/prefixes - 
ie:将
/tmp/前缀
的输出和标准输入(
-
)的输出粘贴在一起,标准输入接收的输出为:
echo“....…@…”tr'/@'\n\n'
(在生成的输出中,在本例中,用
或您想要的任何东西将2分开。例如:
-
,就像您的问题一样。)

它输出:

Username:user
Password:pass
lastname:last

(我知道你想要一个
-
而不是
,但我举了一个
的例子,以更好地将“-”表示标准输入,和“:”表示输出中的字段分隔符。只需将
-d':“
更改为
-d'-”
以有一个
-

首先,我希望您不会在shell脚本和外部命令中操纵重要的密码。这涉及到一些风险


定义问题 我怀疑您想要将一个编码用户用户名、密码和姓氏的字符串拆分为三行结构,在文档中添加标记。因此,
tr
是不够的

但是,它可以在外壳内完成

示例(bash、ksh): 此函数将提取第一个
/
和最后一个
@
之间的所有令牌作为密码值。如果其中一个丢失,它将不打印任何内容,并返回错误状态

运行时,这将提供:

{Username-USER_A
Password-seKreT
lastname-John.Doe}

使用这个简单的脚本并获得输出

#!/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
#/bin/bash
a=“联埃特派团/pass@last"
array2=(`echo$a|tr”/“\n”|tr@“\n”`)
array1=(`echo-e“Username\n密码\n lastname”`)
i=${#数组1[@]}

对于((j=0;jI)需要不同行中的结果
#!/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