列出包含超过1个大写字母的所有单词

时间:2011-12-11 02:13:28

标签: bash

我想搜索文档中放置的所有首字母缩略词,以便我可以更正其格式。我想我可以假设所有首字母缩略词都是包含至少2个大写字母的单词(例如:“EU”),因为我从未见过只包含1个大写字母的单字缩写词或首字母缩略词,但有时它们有一个小“o”代表“o​​f”或其他小写字母。如何打印出一次显示所有可能匹配的列表?

5 个答案:

答案 0 :(得分:2)

这可能对您有用:

tr -s '[:space:]' '\n' <input.txt | sed '/\<[[:upper:]]\{2,\}\>/!d' | sort -u

答案 1 :(得分:2)

grep的-o选项可以帮助您:

grep -o '\b[[:alpha:]]*[[:upper:]][[:alpha:]]*[[:upper:]][[:alpha:]]*'

答案 2 :(得分:2)

几乎只有Bash:

for word in  $(cat file.txt) ; do
  if [[ $word =~ [[:upper:]].*[[:upper:]] ]] ; then # at least 2 capital letters
    echo "${word//[^[:alpha:]]/}"                   # remove non-alphabetic characters
  fi
done

答案 3 :(得分:1)

这对你有用吗?

sed 's/[[:space:]]\+/\n/g' $your_file  | sort -u | egrep '[[:upper:]].*[[:upper:]]'

翻译:

  • 用换行符替换$your_file中的所有空格。这将使每个单词都在自己的行上。
  • 对文件进行排序并删除重复项。
  • 查找包含由零个或多个字符分隔的两个大写字母的所有行。

答案 4 :(得分:0)

使用perl的一种方式。

示例

infile的内容

One T
Two T
THREE 
Four
Five SIX

运行perl命令:

perl -ne 'printf qq[%s\n], $1 while /\b([[:upper:]]{2,})\b/g' infile

结果:

THREE
SIX