解决方案

解决方案

问题

是否可以打印不唯一且跨多行的重复单词?不仅仅是单行中的独特单词。

之前的工作

解决在单词中查找重复单词的问题同一条线。还有一个问题就是和结局不相符字边界与起始的一个。

输入样本

[
    {
        entity: 
        {
            id: int
            employee:
            {
                id: int
                company: {
                    name: string
                    area: 
                    {
                        country: string
                        city: string
                        zipcode: string
                    }
                }
                person: 
                {
                    id: int
                    firstName: string
                    middleName: string
                    lastName: string
                }
            }
        }
        entity: 
        {
            id: int
            person: 
            {
                id: int
                firstName: string
                middleName: string
                lastName: string
            }
            area: 
            {
                country: string
                city: string
                zipcode: string
            }
        }
    }
]

示例输出——重复/重复

area
city
country
entity
firstName
id
int
lastName
middleName
person
string
zipcode

示例输出——唯一

company
employee
name

答案1

解决方案

grep

grep -wo "[[:alnum:]]\+" input_file.txt | sort | uniq [-c | -d | -u]

egrep(允许正则表达式元字符而不转义它们)

egrep -wo "[[:alnum:]]+" input_file.txt | sort | uniq [-c | -d | -u]

解释

  1. 首先,您可以使用 标记单词grep -wo,每个单词都打印在单行上。

  2. 然后您可以使用 对标记化的单词进行排序sort

  3. 最后可以用 找到连续的唯一或重复的单词uniq

    3.1.uniq -c这将打印单词及其计数。涵盖所有匹配的单词——重复的和唯一的。

    3.2.uniq -d这会打印所有重复的单词。

    3.3.uniq -u这将打印所有独特的单词。

例子

输入样本

abc line 1
xyz zzz
123 456
abc end line

示例 1——重复/唯一单词及其计数:

grep -wo '[[:alnum:]]\+' input_file.txt | sort | uniq -c

输出:

   1 1
   1 123
   1 456
   2 abc
   1 end
   2 line
   1 xyz
   1 zzz

示例 2——仅重复单词:

grep -wo '[[:alnum:]]\+' infile | sort | uniq -d

输出:

abc
line

示例 3——仅限唯一单词:

grep -wo '[[:alnum:]]\+' infile | sort | uniq -u

输出

1
123
456
end
xyz
zzz

命令解析和来源

  • grep参数
    • -w标记由单词边界分隔的整个单词(非单词字符\W
    • -o仅打印匹配行的匹配非空部分——即在我们的例子中仅打印匹配行内匹配的非空单词
  • grep正则表达式
    • [[:alnum:]]字母数字字符
    • \+克莱恩加角色。匹配一次或多次出现。
  • sort
  • uniq
    • -c打印单词及其重复计数。
    • -d仅打印重复的行。
    • -u仅打印非重复(唯一)行。

相关内容