たとえば、「testthis」という文字列がアプリケーションに挿入されたとします。
grepワイルドカードに沿って考えていますが、実際に使用したことはありません。
スクリプトを書くことができます。
2
。これは、steveが行ったことを実行するalexの提案の純粋なbash実装ですawk
:
#!/bin/bash
# your string
string="test this"
# First, make a character array out of it
for ((i=0; i<"${#string}"; i++)); do # (quotes just for SO higlighting)
chars[$i]="${string:$i:1}" # (could be space, so quoted)
done
# associative array will keep track of the count for each character
declare -A counts
# loop through each character and keep track of its count
for ((i=0; i<"${#chars[@]}"; i++)); do # (quotes just for SO higlighting)
key="${chars[$i]}" # current character
# (could be space, so quoted)
if [ -z counts["$key"] ]; then # if it doesn't exist yet in counts,
counts["$key"]=0; # initialize it to 0
else
((counts["$key"]++)) # if it exists, increment it
fi
done
# loop through each key/value and print all with count 2
for key in "${!counts[@]}"; do
if [ ${counts["$key"]} -eq 2 ]; then
echo "$key"
fi
done
Bash 4.0で導入された連想配列を使用しているため、これはそれ以降でのみ機能することに注意してください。
使用する1つの方法GNU awk
:
echo "$string" | awk -F '' '{ for (i=1; i<=NF; i++) array[$i]++; for (j in array) if (array[j]==2) print j }'