第一个答案:

第一个答案:

我有八个文件,其开头为:SEALS-*

每个文件都有一个标题和数据:

#Col_1\Col_2\Col_3\col_4    --- header
\\\\\\\\\\                  --- data 

如果是空条目,我需要删除这条记录;它只有\'s 在线。

答案1

使用 Perl 的i标志就地编辑:

$ perl -pi -e '$_ = "" if m{^\\\\}' file.txt

如果您想通过管道将find其输出,请使用xargs

$ find . -type f | xargs perl -pi -e '$_ = "" if m{^\\\\}'

find使用的指令时-exec

$ find . -type f -exec perl -pi -e '$_ = "" if m{^\\\\}' {} \;

答案2

第一个答案:

对于所有文本操作,Perl 始终是一个不错的选择:

perl -e 'while(<>){print if(!/(\\\\)+/)}' file > file.new

但如果您只想使用 shell,这也可以:

grep -v '\\\\' file > file.new

效果很好:)

编辑 :

如果您无法创建新文件,Perl 仍然可以这样做:

perl -e 'open FILE_R, "+<$ARGV[0]"; @line=<FILE_R>; open FILE_W,"+>$ARGV[0]"; foreach(@line){print FILE_W if(!/(\\\\)+/);}' file

让我解释一下这一长行:

open FILE_R, "+<$ARGV[0]"; @line=<FILE_R>;

=> 以“读取”模式打开文件,并将所有数据复制到数组中

open FILE_W,"+>$ARGV[0]"; foreach(@line){print FILE_W if(!/(\\\\)+/);}

=> 在“写入”模式下打开并截断文件,并将所有数据(除了 \\ 行)写入其中。

我建议这个工具如果你想了解更多关于 Perl 的知识:)

相关内容