删除(STDIN)= BASH中的标签

时间:2014-02-20 11:25:44

标签: bash stdin

我遇到了问题(STDIN)

我编写了以下bash脚本来计算字符串的sha1哈希值,并以大写格式输出,准备好复制到plist文件中。例如。

这是脚本: -

#!/bin/bash        

echo 'Enter String :-';    

read temp_var1;                                          #Read string

hash=$(echo -n $temp_var1 | openssl sha1);               #Copy hash into variable $hash

uphash=$(echo $hash | tr '[:lower:]' '[:upper:]';);      #Convert hash to Upper-case

echo 'Below is the UPPERCASE SHA1 Hash of your string';

echo '  </yourHash>'$uphash'</yourHash>';                #Echo formatted string

这个完整的脚本可以很好地解决一个关键问题。 输出不是我想要的。 例如输入

Hello, World!

我想获得以下输出: -

Below is the UPPERCASE SHA1 Hash of your string
</yourHash>0A0A9F2A6772942557AB5355D76AF442F8F65E01</yourHash>

而我得到的是: -

Below is the UPPERCASE SHA1 Hash of your string
</yourHash>(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01</yourHash>

我的问题是。我如何删除此(STDIN)= lable及其后面的空格?

非常感谢您提供任何帮助。

幻影

3 个答案:

答案 0 :(得分:3)

您可以使用参数替换将其从前面剥离:

a="(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01"
b=${a#*= }    # Strip up to "=" sign
echo $b
0A0A9F2A6772942557AB5355D76AF442F8F65E01

我怀疑openssl有一个选项可以阻止它生成“(STDIN)”部分,但是我不会这样做。

如果您想了解有关此类事情的更多信息,请查看here.

答案 1 :(得分:1)

我也成功地使用了这种方法(使用 sed):

hash="(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01"
echo "before"
echo $hash
hash=$(echo $hash | sed 's/(stdin)= //g')  #remove identified pattern globally
echo "after"
echo $hash

结果

before
(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01
after
0A0A9F2A6772942557AB5355D76AF442F8F65E01

答案 2 :(得分:0)

可能不是最佳解决方案,但您可以使用awk选择第二列。像这样:

echo -n $temp_var1 | openssl sha1 | awk '{print $2}'