Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用sed从多个文件中删除多行_Regex_Perl_Sed_Grep_Command - Fatal编程技术网

Regex 使用sed从多个文件中删除多行

Regex 使用sed从多个文件中删除多行,regex,perl,sed,grep,command,Regex,Perl,Sed,Grep,Command,我正在尝试使用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 bhava

我正在尝试使用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'/.*社会[\t]*([0-9]*[\t]*[0-9]*)[\t]*bhavan$/d'.*安

但它什么也没做。有谁知道我做错了什么吗


感谢将小e改为e,其中包括sed中的--regexp扩展regex

sed -i -E '/.*Society[ \t]*([0-9]*[ \t]*[0-9]*)[ \t]*bhavan$/d' *.ann

通过将小的e改为e来工作,其中包括sed中的--regexp扩展regex

sed -i -E '/.*Society[ \t]*([0-9]*[ \t]*[0-9]*)[ \t]*bhavan$/d' *.ann

您只需将
-v
开关添加到
grep
。这将反转逻辑,即仅选择与模式不匹配的线

grep.info

“-v”
“--反向匹配”
反转匹配的意义,以选择不匹配的线。('-v'
由POSIX指定。)

您只需将
-v
开关添加到
grep
。这将反转逻辑,即仅选择与模式不匹配的线

grep.info

“-v”
“--反向匹配”
反转匹配的意义,以选择不匹配的线。('-v'
由POSIX指定。)

只需从regexp中删除
,因为它们不在您的输入中。您告诉grep使用一个PCRE(
-P
),其中这些参数表示一个捕获组(您没有使用,因此它们是冗余的),但随后调用sed时没有任何re特定的选项,因此它使用了一个BRE,其中这些参数是文字字符。顺便说一句,regexp开头的
*
没有做任何有用的事情,所以您也可以删除它。

只需从regexp中删除
,因为它们不在您的输入中。您告诉grep使用一个PCRE(
-P
),其中这些参数表示一个捕获组(您没有使用,因此它们是冗余的),但随后调用sed时没有任何re特定的选项,因此它使用了一个BRE,其中这些参数是文字字符。顺便说一句,regexp开头的
*
没有做任何有用的事情,所以您也可以删除它。

为什么需要启用ERE?答:因为您的regexp中有不必要的paren。正确的。谢谢。为什么需要启用ERE?答:因为您的regexp中有不必要的paren。正确的。非常感谢。