我想打印所有包含两个相同单词的句子。 这句话以。结尾。要么 ?或者!。
输入:
word ja ba word. Na Na word wdd? Nothing kkk
ok ok! word no this no word. ok ok. notok!
输出应该是:
Na Na word wdd?
Nothing kkk
ok ok!
ok ok.
到目前为止,这是我的代码:
#!/bin/bash
if [ $# -eq 0 ]
then
echo "No arguments"
fi
if [[ -f $1 ]] #if its file
then
cat $1 | awk '{
for (i=1;i<=NF;i++)
{
}}'
fi
我不知道如何用AWK分隔完整的句子。我不能使用multpile文件分隔符(!重要)。如果我将它们分开,如何检查里面的每个字?我需要使用AWK。
这是我最新的想法:
cat $1 | awk '{
for (i=1;i<=NF;i++)
{
a=0;
if ($i ~ "\?$" || $i ~ "\!$" || $i ~ "\.$")
{
#print $i;
k='';
for(j=$i; j!=$a; j--);
{
if( $j == $k)
#print whole sentence
$k=$j;
}
}
}}'
我发现单词以?/./!结尾,然后检查最后一句之前的所有单词
答案 0 :(得分:4)
export default DS.Model.extend({
aRequiredField: DS.attr('date'),
anOptionalField: DS.attr('date', {
defaultValue: function () {
return this.get('aRequiredField') ;
}.bind(this)
}),
});
就足够了:
grep
测试:
grep -Pzo "[^.?!]*\b(\w+) \1[^.?!]*"
说明:
$ echo '''word ja ba word. Na Na word wdd? Nothing kkk
ok ok! word no this no word. ok ok. notok!''' | grep -Pzo "[^.?!]*\b(\w+) \1[^.?!]*"
Na Na word wdd
Nothing kkk
ok ok
ok ok
标记使-o
仅返回匹配的结果,而不是grep
标记使-P
使用PCRE正则表达式grep
标志在行尾压缩换行符,将其替换为空字符。也就是说,grep知道行尾的位置,但将输入视为一个大行。-z
匹配句子的开头:它会匹配尽可能多的字符,但没有句子终结符(。?!)[^.?!]*
匹配单词字符,并将它们分组到正则表达式的第一组中。单词边界确保我们不仅匹配单词的结尾(谢谢123!)。\b(\w+)
引用了第一个组,因此我们必须将两个相同的单词用空格分隔\1
匹配句子的结尾答案 1 :(得分:2)
$scope.getValues = function (values) {
return values.filter(function (item) {
return item.iscorrect === '';
});
}
gawk
设置以$ awk -v RS='[!?.] +' '{for(i=1;i<NF;i++) if($i==$(i+1)) print $0 RT "\n"}' file
Na Na word wdd?
Nothing kkk
ok ok!
ok ok.
结尾的记录和可选空格。迭代句子中的单词重复,用匹配的记录终止符打印句子,用句子之间的间隔打印新行。
以下是与此处文档相同的脚本
[!?.]
应该给你
awk -v RS='[!?.] +' '{for(i=1;i<NF;i++) if($i==$(i+1)) print $0 RT "\n"}' << EOF
> word ja ba word. Na Na word wdd? Nothing kkk
> ok ok! word no this no word. ok ok. notok!
> EOF