是否有一種簡單的方法可以在命令行中從文本文件夾中刪除同一行文本?從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. 從多個文件中刪除文本
- 3. 從PowerShell中的多個文本文件中刪除行
- 4. bash - 從文本文件中刪除多行不同的文本
- 5. 從另一個文件中的文本文件中刪除行
- 6. 從linux文件中刪除^ @個字符
- 7. Powershell - 從文本文件中刪除行
- 8. 從文本文件中刪除一行?
- 9. 從文本文件中刪除一行
- 10. 從文本文件中刪除行
- 11. 從from.txt文件中刪除文本行
- 12. 在C++中刪除LINUX文本文件中的行
- 13. 使用sed從文本文件中刪除多個文件名
- 14. 從perl中的多個文本文件中刪除重複項?
- 15. 從文本文件中刪除文本
- 16. 從文本文件中刪除文本
- 17. 從Linux上的文件中刪除com.apple.quarantine
- 18. 刪除多個文件中的行
- 19. VB.NET - 如何刪除文本文件中的多個連續行?
- 20. 從多個文本文件的頭尾刪除行併合並
- 21. 使用grep從文本文件中刪除多行
- 22. 從文本文件中刪除多行vb
- 23. 如何從VB6的文本文件中刪除一行文本?
- 24. 從文本文件中刪除包含特定文本的行
- 25. 從文本文件中刪除換行符前的一個或多個空格
- 26. 從每個文本文件中刪除最後一個空行
- 27. 從第一個字給出的文本文件中刪除行
- 28. 從文件中刪除行
- 29. 從文件中刪除行
- 30. 從文件中刪除行
對於`-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