我正在尝试使用sed删除与正则表达式匹配的某些行。
命令从所有要删除的文件中获取所有行
grep -P '.*Society[ \t]*([0-9]*[ \t]*[0-9]*)[ \t]*bhavan$' *.ann
结果:
file0122.ann:T324 Society 4520 4526 bhavan
file0126.ann:T225 Society 9191 9197 bhavan
file0319.ann:T84 Society 43 49 bhavan
file0376.ann:T65 Society 2611 2617 bhavan
file0627.ann:T171 Society 4104 4110 bhavan
file1159.ann:T87 Society 4073 4079 bhavan
file1533.ann:T150 Society 2787 2793 bhavan
file1582.ann:T80 Society 2548 2554 bhavan
file1813.ann:T115 Society 1213 1219 bhavan
file1876.ann:T163 Society 1998 2004 bhavan
file1879.ann:T165 Society 2513 2519 bhavan
file2521.ann:T109 Society 326 332 bhavan
file2537.ann:T100 Society 2574 2580 bhavan
file3725.ann:T109 Society 2988 2994 bhavan
我正在使用以下sed命令从所有文件中删除以上行
sed -i -e '/.*Society[ \t]*([0-9]*[ \t]*[0-9]*)[ \t]*bhavan$/d' *.ann
但是它什么也没做。有人能告诉我我做错了吗?
谢谢
答案 0 :(得分:2)
您只需将-v
开关添加到grep
。这将颠倒逻辑,即仅选择与模式不匹配的线。
来自grep.info
:
‘-v’
‘--invert-match’
Invert the sense of matching, to select non-matching lines. (‘-v’
is specified by POSIX.)
答案 1 :(得分:1)
只需从正则表达式中删除)
和-P
,因为它们不在您的输入中。您要告诉grep使用PCRE(.*
),其中这些括号代表捕获组(您没有使用它们,因此它们是多余的),然后调用sed而不使用任何特定于RE的选项,因此它使用的是BRE其中那些括号是文字字符。顺便说一句,正则表达式开始处的let array = [];
let count = 1;
for(let i = 1; i < 15; i++){
if(i == count){
break
}else{
array.push(i);
}
count++;
}
并没有做任何有用的事情,因此您也可以删除它。
答案 2 :(得分:0)
通过将小e更改为E来工作,其中包括--regexp扩展了sed中的regex。
BaseMainActivity