如何从多个文件中删除模式

如何从多个文件中删除模式

我有一个包含如下信息的数据文件:

977.txt:[email protected]
977.txt:[email protected]
980.txt:[email protected]
982.txt:[email protected]
985.txt:[email protected]
987.txt:[email protected]
987.txt:[email protected]
991.txt:[email protected]
991.txt:[email protected]
991.txt:[email protected]
994.txt:[email protected]
995.txt:[email protected]
999.txt:[email protected]

我想删除之前的所有内容:如何对目录(Linux)中的所有文件执行此操作。

我已经尝试过这个,它可以工作,但我无法将它与多个文件一起使用:

grep -o - '[[:alnum:]+\._\-]*@[[:alnum:]+\._\-]*' file.txt

答案1

另一个sed解决方案。

$ sed -n 's/[^:]*\://p' infile
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
$

这可以轻松扩展以使用该选项进行就地编辑-i,并使用递归编辑目录树中的文件find

答案2

要删除单个目录中所有文件的前导部分:

sed -i -r 's/^[0-9]+\.txt://' *

首先测试几个文件的副本。

答案3

根据涉及的文件数量或目录的深度,您可能会遇到一些错误,但对于少量文件,这应该适用于 ed。

 printf '%s\n' 'g/^.*:\(.*\)/s//\1/' w q | ed -s *

相关内容