有一个简单的方法,从在命令行全文文档的文件夹中删除文本的同一行?
Answer 1:
如果您的SED的版本允许-i.bak
标志(编辑到位):
sed -i.bak '/line of text/d' *
如果没有,只是把它放在一个bash循环:
for file in *.txt
do
sed '/line of text/d' "$file" > "$file".new_file.txt
done
Answer 2:
为了找到a pattern
并删除the line containing the pattern
以下命令可用于
find . -name "*" -type f | xargs sed -i -e '/<PATTERN>/d'
例如:如果你要删除包含字线sleep
中的所有xml
文件
find . -name "*.xml" -type f | xargs sed -i -e '/sleep/d'
注:选择一个模式,因为它会在当前目录层次结构中的所有文件删除递归前行小心:)
Answer 3:
考虑的grep -v:
for thefile in *.txt ; do
grep -v "text to remove" $thefile > $thefile.$$.tmp
mv $thefile.$$.tmp $thefile
done
grep的-v显示除了那些匹配的所有行,他们进入一个临时文件,然后将TMPFILE移回旧的文件名。
Answer 4:
perl -ni -e 'print if not /mystring/' *
这告诉Perl来遍历文件(-n),编辑到位(-i),并打印行,如果它不符合您的正则表达式。
有点相关,这里是在几个文件进行替换的便捷方式。
perl -pi -e 's/something/other/' *
Answer 5:
我写了一个Perl脚本此:
#!/usr/bin/perl
use IO::Handle;
my $pat = shift(@ARGV) or
die("Usage: $0 pattern files\n");
die("Usage $0 pattern files\n")
unless @ARGV;
foreach my $file (@ARGV) {
my $io = new IO::Handle;
open($io, $file) or
die("Cannot read $file: $!\n");
my @file = <$io>;
close($io);
foreach my $line (@file) {
if($line =~ /$pat/o) {
$line = '';
$found = 1;
last;
}
}
if($found) {
open($io, ">$file") or
die("Cannot write $file: $!\n");
print $io @file;
close($io);
}
}
请注意,它消除了基于正则表达式的行。 如果你想要做精确匹配,内部foreach
将如下所示:
foreach $line (@file) {
chomp $line;
if($line eq $pat) {
$line = '';
$found = 1;
last;
}
}
文章来源: Remove line of text from multiple files in Linux