Bash 如果不在字符串中则显示字符
Bash show charcaters if not in string
我正在尝试 bash,现在我正在尝试制作一个简单的刽子手游戏。
一切正常,但我不明白如何做一件事:
我正在向用户展示带有猜测字母的单词(例如,世界是 hello world,用户猜到了 'l' 我向他们展示 **ll* ***l* )
我将用户已经尝试过的字母存储在 var guess
我用以下方法做到这一点:
echo "${word//[^[:space:]$guess]/*}"
我现在要做的是回显字母表,但省略用户已经尝试过的字母,所以在这种情况下显示没有 L 的完整字母表。
我已经尝试按照刚才展示的方式进行操作,但效果不佳。
如果您需要更多信息,请告诉我。
谢谢,
蒂姆
首先将两个字符串存储在文件中,每行存储一个字符:
sed 's/./&\n/g' | sort <<< $guess > guessfile
sed 's/./&\n/g' | sort <<< $word > wordfile
然后我们可以过滤掉只出现在其中一个文件中的单词,并将这些行粘贴在一起作为一个字符串:
grep -xvf guessfile wordfile | paste -s -d'[=11=]'
当然我们会自己清理:
rm wordfile
rm guessfile
如果输出不正确,请尝试在 grep 中切换参数(即 wordfile guessfile
而不是 guessfile wordfile
)。
您没有显示您的尝试,但参数扩展工作正常。
$ alphabet=abcdefghijklmnopqrstuvwxyz
$ word="hello world"
$ guesses=aetl
$ echo "${word//[^[:space:]$guesses]/*}"
*ell* ***l*
$ echo "${alphabet//[$guesses]/*}"
*bcd*fghijk*mnopqrs*uvwxyz
我正在尝试 bash,现在我正在尝试制作一个简单的刽子手游戏。
一切正常,但我不明白如何做一件事:
我正在向用户展示带有猜测字母的单词(例如,世界是 hello world,用户猜到了 'l' 我向他们展示 **ll* ***l* )
我将用户已经尝试过的字母存储在 var guess
我用以下方法做到这一点:
echo "${word//[^[:space:]$guess]/*}"
我现在要做的是回显字母表,但省略用户已经尝试过的字母,所以在这种情况下显示没有 L 的完整字母表。
我已经尝试按照刚才展示的方式进行操作,但效果不佳。
如果您需要更多信息,请告诉我。
谢谢, 蒂姆
首先将两个字符串存储在文件中,每行存储一个字符:
sed 's/./&\n/g' | sort <<< $guess > guessfile
sed 's/./&\n/g' | sort <<< $word > wordfile
然后我们可以过滤掉只出现在其中一个文件中的单词,并将这些行粘贴在一起作为一个字符串:
grep -xvf guessfile wordfile | paste -s -d'[=11=]'
当然我们会自己清理:
rm wordfile
rm guessfile
如果输出不正确,请尝试在 grep 中切换参数(即 wordfile guessfile
而不是 guessfile wordfile
)。
您没有显示您的尝试,但参数扩展工作正常。
$ alphabet=abcdefghijklmnopqrstuvwxyz
$ word="hello world"
$ guesses=aetl
$ echo "${word//[^[:space:]$guesses]/*}"
*ell* ***l*
$ echo "${alphabet//[$guesses]/*}"
*bcd*fghijk*mnopqrs*uvwxyz