我有一个文本文件,需要删除其中不包含http
的所有行。或者,它可以将其中包含http
的所有文件输出到新文件。
我的原始文件的名称是 list.txt,我需要生成一个名称类似于 new.txt 的新文件
我知道通过命令行有几种方法可以做到这一点,但我真正要寻找的是最快的方法,因为我需要用几个文件来做这件事,而且每个文件的大小都是几吉格......
我有一个文本文件,需要删除其中不包含http
的所有行。或者,它可以将其中包含http
的所有文件输出到新文件。
我的原始文件的名称是 list.txt,我需要生成一个名称类似于 new.txt 的新文件
我知道通过命令行有几种方法可以做到这一点,但我真正要寻找的是最快的方法,因为我需要用几个文件来做这件事,而且每个文件的大小都是几吉格......
perl -i -lne 'print if(/http/)' your_file
如果文件中没有 http,则上述命令将从文件中删除所有行。如果您坚持保留原始文件备份,您可以无论如何提供“.bak”选项,如下所述:
perl -i.bak -lne 'print if(/http/)' your_file
通过这个 your_file.bak 将生成,它只是原始文件的副本,原始文件将根据您的需要进行修改。您也可以使用 awk:
awk '/http/' your_file
这将输出到控制台。无论如何,您都可以使用“>”将输出存储在新文件中。
最快、最短的解决方案,
fgrep -v "http"
当然,grep、egrep、awk、perl 等使这更加可替代。
这是一个简短的 shell 脚本。编辑包含的“delhttp.sh”,
#!/bin/bash
if [ $# -eq 0 ] ; then
fgrep -v "http"
elif [ $# -eq 1 ] ; then
f1=${1:-"null"}
if [ ! -f $f1 ]; then echo "file $f1 dne"; exit 1; fi
fgrep -v "http" $f1 #> $f2
elif [ $# -eq 2 ]; then
f1=${1:-"null"}
if [ ! -f $f1 ]; then echo "file $f1 dne"; exit 1; fi
f2=${2:-"null"}
fgrep -v "http" $f1 > $f2
fi
然后使这个文件可执行使用,
chmod +x delhttp.sh
这是一个 perl 脚本(如果您愿意的话),编辑 "delhttp.pl" 包含,
#!/bin/env perl
use strict;
use warnings;
my $f1=$ARGV[0]||"-";
my $f2=$ARGV[1]||"-";
my ($fh, $ofh);
open($fh,"<$f1") or die "file $f1 failed";
open($ofh,">$f2") or die "file $f2 failed";
while(<$fh>) { if( !($_ =~ /http/) ) { print $ofh "$_"; } }
再次,使这个文件可执行使用,
chmod +x delhttp.pl
你可以使用 grep。使用-v
反转匹配的感觉,选择不匹配的行。
grep -v 'http' list.txt
使用 Perl 单线:
perl -ne '/^(?:(?!http).)*$/ and print' list.txt > new.txt