2014-08-30 36 views
0

我有这个字符串去除串在bash脚本的一封信

字母= ABCDEFGHIJKLMNOPQRSTUVWXYZ

,我想,让用户输入一个特定的词,从字母表删除其信;但一旦我得到输入,我不知道如何真正删除字符串中的字母,以便它的大小最小化。我写了下面的代码:

#!/bin/bash 

Alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
echo -n "Please enter your key: " 
read -e KEY 

Asize=`expr ${#Alphabet} - 1` 
Ksize=`expr ${#KEY} - 1` 

kcount=0 

#A loop to go through the key characters 
while [ $kcount -le $Ksize ] 
    do 
    D=${KEY:$kcount:1} 

    Acount=0 
#A loop to go through the alphabet characters to look for the current key letter to delete it 
    while [ $Acount -le $Asize ] 
    do 
     if [ "${KEY:$kcount:1}" == "${Alphabet:$Acount:1}" ]; 

     then 
      **REMOVING PART** 
      break 
     else 
      Acount=$[$Acount+1] 

如果有人知道我该怎么做,我会非常感谢他的帮助。 谢谢。一个例子示:

输入:CZB 输出:

Kcount = 0:ABDFGHIJLMNOPQRSTUVWXYZ

Kcount = 1:ABDFGHIJLMNOPQRSTUVWXY

Kcount = 2:ADFGHIJLMNOPQRSTUVWXY

+0

'$ [...]''和'expr'(算术)一样已经过时了。改为使用标准的'$((...))'符号。 – chepner 2014-08-31 14:58:33

回答

2
$ foo="bar" 
$ echo "${foo/a/}" 
br 

如果您在提示符下键入CBZ

SYNOPSIS 
    tr [-Ccu] -d string1 
    … 

DESCRIPTION 
    The tr utility copies the standard input to the standard output with sub- 
    stitution or deletion of selected characters. 
    … 

    -d  Delete characters in string1 from the input. 

因此

#!/bin/bash 
Alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
echo -n "Please enter your key: " 
read -e KEY 
echo "$Alphabet" | tr -d "$KEY" 

产生输出ADFGHIJLMNOPQRSTUVWXYParameter substitution

+0

实际上,此代码仅显示不包含输入字符的字符串,但不会将其删除。例如,如果我稍后为“r”字母执行它,它将输出:“ba”..所以字母“a”未被删除。但无论如何谢谢回答。 – Alladin 2014-08-30 17:57:38

+0

您是否尝试将结果分配回变量? – 2014-08-30 18:00:00

+0

非常感谢你的工作 – Alladin 2014-08-30 18:05:45

0

使用tr实用程序。