如何查找bash
中字符串中没有重复的单词?我想知道是否有一个“本地”bash
这样做的方式,或者如果我需要使用另一个命令行实用程序(如awk,sed,grep,...)。例如,var1="thrice once twice twice thrice";
。我需要一些能将“一次”这个词分开的词,因为它只出现一次(即没有重复)。查找字符串中只出现一次的单词
回答
您可以通过空格分割后的字符串使用sort
,uniq
:
tr ' ' '\n' <<< "$var1" | sort | uniq -u
这将产生once
您的输入。
(如果输入包含标点符号,你可能会想,以避免意外的结果任何事情之前将其删除。)
@ devnull的回答是更好的选择(无论是简单性和可能的表现),但如果你正在寻找一个庆典,唯一的解决办法:
注意事项:
- 用途关联数组,仅在bash 4或更高版本中可用:
- 在输入单词列表中使用文字
*
将不起作用(但其他类似glob的字符串也可以)。 - 正确处理多行输入和输入多个空白字符。词之间。
# Define the input word list.
# Bonus: multi-line input with multiple inter-word spaces.
var1=$'thrice once twice twice thrice\ntwice again'
# Declare associative array.
declare -A wordCounts
# Read all words and count the occurrence of each.
while read -r w; do
[[ -n $w ]] && ((wordCounts[$w]+=1))
done <<<"${var1// /$'\n'}" # split input list into lines for easy parsing
# Output result.
# Note that the output list will NOT automatically be sorted, because the keys of an
# associative array are not 'naturally sorted'; hence piping to `sort`.
echo "Words that only occur once in '$var1':"
echo "---"
for w in "${!wordCounts[@]}"; do
((wordCounts[$w] == 1)) && echo "$w"
done | sort
# Expected output:
# again
# once
有趣。尽管如此,它不完全是我所说的*高雅的* ... – BenjiWiebe
同意 - 坚持@ devnull的解决方案,并把它当作bash的关联数组的示范。 – mklement0
只是为了好玩,AWK:
awk '{
for (i=1; i<=NF; i++) c[$i]++
for (word in c) if (c[word]==1) print word
}' <<< "$var1"
once
+1;容易推广到处理_multi-line_ input:'awk'{for(i = 1; i <= NF; i ++)c [$ i] ++; } END {for(word in c)if(c [word] == 1)print word}'<<<“$ var1”'。有一点需要注意:输出单词列表不会被排序。 – mklement0
- 1. 查找只出现一次的单词
- 2. 在只出现一次的字符串中查找字符
- 3. 查找python中字符串中单词的出现次数3
- 4. C++:查找字符串中字符的最后一次出现
- 5. 查找字符串中的单词词
- 6. indexOf在字符串中查找所有出现的单词
- 7. 从字符串中删除单词的第一次出现?
- 8. 替换字符串中最后一次出现的单词 - c#
- 9. 如何更改字符串中第一次出现的单词
- 10. 如何查找字符串中所有单词的出现次数
- 11. 查找每个单词出现在字符串中的次数php
- 12. iOS - 在字符串中查找单词出现次数的最有效方法
- 13. 查找字符串中第一次出现子串的位置
- 14. 查找字符串中的单词
- 15. 使用Ruby查找字符串中字符的出现次数
- 16. 查找字符串中出现字符的次数
- 17. 查找字符串中字符的最后出现次数
- 18. PHP:查找字符串中的最后一次出现
- 19. 如何查找Swift字符串中子字符串的最后一次出现?
- 20. 如何查找给定字符串中的第一个字符,该字符只出现一次
- 21. 计算字符串向量中单词的出现次数
- 22. 计算单词出现在字符串中的次数?
- 23. 如何查找只有大写字母的单词(字符串)?
- 24. 查找字符串“出现两次,一个字母”
- 25. 如何查找只出现在字符串中的数字?
- 26. 从字符串中的一组单词中出现一个单词
- 27. 检查一次出现在字符串中相同字符的
- 28. 查找字符串的最后一次出现
- 29. 字符串查找单词的Javascript
- 30. 如何查找一个字符串中字符出现的总次数?
我会说没有,有没有简单而优雅的方式。 (虽然我准备证明是错误的一半,但这个网站很棒。) – tripleee
定义了“拆分”。 –
@KarolyHorvath'var1'将被闲置。我只需要以某种方式拥有独特的单词,所以我可以在脚本的其余部分使用它。 – BenjiWiebe