我需要在unix(bash)中使用egrep(或grep -e)在文件中找到重复的单词
我试过了:
egrep "(\<[a-zA-Z]+\>) \1" file.txt
和
egrep "(\b[a-zA-Z]+\b) \1" file.txt
但出于某种原因,这些人认为重复的事情并非如此!
例如,它认为字符串&#34;单词&#34;尽管有边界条件\>
或\b
,但仍符合标准。
答案 0 :(得分:4)
\1
匹配第一次捕获匹配的任何字符串。这与匹配第一次捕获匹配的相同模式不同。因此,即使\b
位于捕获括号内,第一次捕获在单词边界上匹配的事实也不再相关。
如果您希望第二个实例也在单词边界上,您需要这样说:
egrep "(\b[a-zA-Z]+) \1\b" file.txt
这与以下内容没有什么不同:
egrep "\b([a-zA-Z]+) \1\b" file.txt
模式中的空格强制一个单词边界,所以我删除了多余的\b
。如果你想更明确,你可以把它们放在:
egrep "\<([a-zA-Z]+)\> \<\1\>" file.txt
答案 1 :(得分:1)
这是预期的行为。查看override func viewDidAppear(animated: Bool) {
let predicate = NSPredicate(format: "username != '"+userName+"'")
var query = PFQuery(className: "_User", predicate: predicate)
do {
var objects = try query.findObjects()
for object in objects {
**self.resultsUsernameArray.append(object.username!!)**
self.resultsProfileNameArray.append(object["profileName"] as! String)
}
} catch _ {
//Error handling, if needed
}
}
说的内容:
反斜杠字符和特殊表达
符号\&lt;和&gt;分别匹配空字符串 一个词的开头和结尾。符号\ b与空字符串匹配 一个单词的边缘,\ B匹配空字符串,前提是它不是 在一个词的边缘。符号\ w是[ [:alnum:]]和的同义词 \ W是[^ [:alnum:]]的同义词。
然后在另一个地方,我们会看到&#34; word&#34;是:
匹配控制
单词构成字符是字母,数字和下划线。
这就是产生的结果:
man grep
答案 2 :(得分:0)
我用
if ($images) {
$imgDir = $this->container->getparameter('kernel.root_dir').'/../web/user/images';
$artist->setImages(array_map(function ($img) use ($imgDir) {
$imgName = md5(uniqid()).'.'.$img->guessExtension();
$img->move($imgDir, $imgName);
return $imgName;
}, $images));
}
$em->persist($artist);
$em->flush();
检查我的文档是否存在此类错误。如果重复的单词之间存在换行符,这也有效。
说明:
pcregrep -M '(\b[a-zA-Z]+)\s+\1\b' *
以多线模式运行(如果在重复的单词之间换行,则很重要。-M, --multiline
:匹配单词[a-zA-Z]+
:字边界,请参阅tutorial \b
将其分组(\b[a-zA-Z]+)
匹配至少一个(但必要时更多)空格字符。这包括换行符。\s+
:匹配第一组中的内容答案 3 :(得分:-1)
egrep "(\<[a-zA-Z]+>) \<\1\>" file.txt
解决了这个问题。
基本上,你必须告诉\ 1它还需要保持字边界