Regex 使用sed从多个文件中删除多行
我正在尝试使用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
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。正确的。非常感谢。