问题
是否可以打印不唯一且跨多行的重复单词?不仅仅是单行中的独特单词。
之前的工作
有这解决在单词中查找重复单词的问题同一条线。还有一个问题就是和结局不相符字边界与起始的一个。
输入样本
[
{
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]
解释
首先,您可以使用 标记单词
grep -wo
,每个单词都打印在单行上。然后您可以使用 对标记化的单词进行排序
sort
。最后可以用 找到连续的唯一或重复的单词
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