我有八个文件,其开头为: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 的知识:)