是否有一种简单的方法可以在命令行中从文本文件夹中删除同一行文本?从Linux中的多个文件中删除文本行
33
A
回答
36
如果你的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
1
我写了这个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;
}
}
4
考虑的grep -v:
for thefile in *.txt ; do
grep -v "text to remove" $thefile > $thefile.$$.tmp
mv $thefile.$$.tmp $thefile
done
grep -v显示除匹配的所有行之外的所有行,它们进入临时文件,然后将tmpfile移回旧文件名。
3
perl -ni -e 'print if not /mystring/' *
这告诉perl遍历文件(-n),就地编辑(-i),并打印出与正则表达式不匹配的行。
有点相关,这里有一个方便的方法来执行几个文件的替换。
perl -pi -e 's/something/other/' *
6
要找到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'
注意:在选择模式之前要小心,因为它会以递归方式删除所有行当前目录层次结构中的文件:)
相关问题
- 1. 从文本文件中删除多行
- 2. 从PowerShell中的多个文本文件中删除行
- 3. bash - 从文本文件中删除多行不同的文本
- 4. 从文本文件中删除一行?
- 5. 从文本文件中删除行
- 6. 在C++中删除LINUX文本文件中的行
- 7. 使用sed从文本文件中删除多个文件名
- 8. 如何从linux中的多个文件中删除特定的行?
- 9. 删除多个文件中的行
- 10. 使用grep从文本文件中删除多行
- 11. 如何从VB6的文本文件中删除一行文本?
- 12. 从文本文件中删除包含特定文本的行
- 13. 从每个文本文件中删除最后一个空行
- 14. 从文件中删除行
- 15. 从文件中删除行
- 16. 删除文本文件中的行
- 17. 删除文本文件中的行
- 18. 从文件中删除文件版本
- 19. 从文件中删除多个BOM
- 20. 从NSDirectory中删除多个文件
- 21. 从多个文件中删除six.b
- 22. LINUX从文件中删除文本部分与sed基于
- 23. 从文本文件中删除多个字符使用C
- 24. 从多个文本文件中删除第二行最后一行
- 25. 从多个文本文件名中提取行,然后从文本文件中提取这些行 - Linux
- 26. 从文本文件中删除一行文本
- 27. 从许多文件中删除文件字符的DOS结束在Linux中
- 28. 删除文本中的多行
- 29. 如何从C#中的文本文件中删除空行#
- 30. 从VB08中的文本文件中删除一行
对于`-i.bak` gsed fu +1。你的`for循环`可能需要一个`mv $ file.new_file.txt $ file`来匹配它。 – nik 2009-07-25 19:10:57
@Robert,如果你错过了右边的sed,你仍然可以这样做:`perl -pi.bak -e'| | g'\ *` – nik 2009-07-25 19:12:53