Có cách nào đơn giản để xóa cùng một dòng văn bản khỏi một thư mục chứa đầy tài liệu văn bản ở dòng lệnh không?Xóa dòng văn bản khỏi nhiều tệp trong Linux
Trả lời
Nếu phiên bản của sed cho phép -i.bak
cờ (chỉnh sửa tại chỗ):
sed -i.bak '/line of text/d' *
Nếu không, chỉ cần đặt nó trong một vòng lặp bash:
for file in *.txt
do
sed '/line of text/d' "$file" > "$file".new_file.txt
done
Tôi đã viết một kịch bản Perl cho điều này:
#!/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);
}
}
Lưu ý rằng nó loại bỏ dòng dựa trên một regex. Nếu bạn muốn làm kết hợp chính xác, khu vực nội foreach
sẽ trông như thế:
foreach $line (@file) {
chomp $line;
if($line eq $pat) {
$line = '';
$found = 1;
last;
}
}
Cân nhắc -v grep:
for thefile in *.txt ; do
grep -v "text to remove" $thefile > $thefile.$$.tmp
mv $thefile.$$.tmp $thefile
done
Grep -v hiển thị tất cả các dòng trừ những dòng khớp nhau, chúng đi vào một tệp tạm thời, và sau đó tmpfile được chuyển trở lại tên tệp cũ.
perl -ni -e 'print if not /mystring/' *
Điều này yêu cầu perl lặp lại tệp của bạn (-n), chỉnh sửa tại chỗ (-i) và in dòng nếu nó không phù hợp với cụm từ thông dụng của bạn.
Hơi liên quan, đây là một cách tiện dụng để thực hiện thay thế trên nhiều tệp.
perl -pi -e 's/something/other/' *
Từ [link] này (http://www.kuro5hin.org/story/2009/3/9/191744/8407): cả perl và sed đều là động cơ NFA truyền thống, vì vậy về mặt lý thuyết chúng không khác biệt nhiều trong hiệu suất, nhưng trong thực tế perl có một số lượng lớn các tối ưu hóa được áp dụng để làm cho nó hoạt động tốt trong các trường hợp phổ biến. – stephenmm
Để tìm a pattern
và loại bỏ the line containing the pattern
dưới lệnh có thể được sử dụng
find . -name "*" -type f | xargs sed -i -e '/<PATTERN>/d'
Ví dụ: nếu bạn muốn loại bỏ các dòng có chứa từ sleep
trong tất cả các xml
file
find . -name "*.xml" -type f | xargs sed -i -e '/sleep/d'
LƯU Ý: Hãy cẩn thận trước khi chọn một mẫu vì nó sẽ xóa dòng đệ quy trong tất cả các tệp trong hệ thống phân cấp thư mục hiện tại :)
- 1. Xóa dòng cụ thể khỏi tệp văn bản?
- 2. Xóa các dòng trùng lặp khỏi tệp văn bản?
- 3. Xóa hai ký tự cuối cùng khỏi mỗi dòng trong một tệp văn bản
- 4. Xóa một dòng cụ thể trong một tệp văn bản?
- 5. C++ xóa dòng văn bản trong một tệp
- 6. Xóa số khỏi văn bản bằng C#
- 7. văn bản nhiều dòng văn bản trong hộp giới hạn
- 8. Xóa dòng mới khỏi cuối tệp
- 9. Xóa Dòng Tệp Văn bản Hàng đầu bằng PowerShell
- 10. Thay thế một dòng với nhiều dòng văn bản
- 11. Xóa Twitter Typeahead khỏi Hộp văn bản
- 12. Xóa "\ n" cuối cùng khỏi văn bản
- 13. Xóa các dòng có chứa từ khóa khỏi một tệp
- 14. Xóa nhiều BOM khỏi một tệp
- 15. Làm cách nào để xóa các dòng trống khỏi văn bản trong PHP?
- 16. Xóa các cột khỏi tệp có awk hoặc từ dòng lệnh trên linux
- 17. Xóa các dòng X đầu tiên khỏi một tệp PHP
- 18. Linux: xóa phần mở rộng tệp cho nhiều tệp
- 19. đọc tệp văn bản trong dòng R theo dòng
- 20. Lệnh hoặc tập lệnh Linux đếm các dòng trùng lặp trong một tệp văn bản?
- 21. Xóa các dòng khỏi tệp với SED hoặc AWK
- 22. Tệp hàng loạt để xóa 3 dòng đầu tiên của một tệp văn bản
- 23. Tải xuống 100MB tệp văn bản mới nhất trong linux
- 24. Xóa dòng khỏi geom_smooth trong ggplot2
- 25. Tìm và thay thế nhiều dòng trong tệp xml/văn bản bằng cách sử dụng python
- 26. tạo danh sách ra khỏi tệp văn bản trong java?
- 27. Jquery - Chỉ xóa nội dung văn bản khỏi div
- 28. jQuery Xóa văn bản cụ thể khỏi một phần tử
- 29. Cách sử dụng PowerShell để xóa không gian từ cuối dòng trong một tệp văn bản
- 30. Xóa số dòng khỏi SyntaxHighlighter
+1 cho fu' -i.bak' gsed fu. 'For loop' của bạn có thể cần' mv $ file.new_file.txt $ file' để khớp với nó. – nik
@Robert, Nếu bạn bỏ lỡ sed phù hợp, bạn vẫn có thể làm: dòng văn bản «perl -pi.bak -e '| | g' \ *' – nik
Để lại một dòng trống hơn là xóa dòng, phải ? –