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

时间:2014-03-03 12:13:33

标签: shell

shell脚本以不同方式打印三个单词我试过

{ 
a="Uname/pass@last"
echo $a | tr "/" "\n" | tr "@" "\n"
output is:
Uname
pass
last
}

我希望它为

{Username- Uname
Password- pass
lastname-last}

3 个答案:

答案 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中完成。

示例(bash,ksh):

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