Làm cách nào để lấy danh sách và xóa nó khỏi tệp?


10

Tôi có một danh sách dài các tên miền mà tôi cần xóa khỏi / etc / tên miền từ xa. Có lẽ chúng không theo thứ tự cụ thể nào trong tệp. Mỗi tên miền là trên một dòng.

Làm thế nào tôi có thể lặp qua danh sách và tìm dòng đó trong các miền từ xa và loại bỏ nó.

Câu trả lời:


11
grep -Fxf list -v /etc/remotedomains > remotedomains.new
mv remotedomains.new /etc/remotedomains

Các -vbảo grep để dòng đầu ra duy nhất mà không phù hợp với mô hình.

Các -f listbảo grep để đọc các mô hình từ tập tin list.

Yêu cầu -Fgrep diễn giải các mẫu dưới dạng chuỗi đơn giản, không phải biểu thức chính quy (vì vậy bạn sẽ không gặp rắc rối với các ký tự meta regex).

Các -xbảo grep để phù hợp với toàn bộ dòng, ví dụ như nếu có một mô hình foomà chỉ nên loại bỏ các dòng foo, không phải là dòng foobarhay barfoo.


3
lưu ý: luôn nhớ sao lưu /etc/localdomains/etc/remotedomainstrước khi làm những việc như thế này.
xenoterracide

3
-Fdành cho kết hợp chuỗi cố định (chính xác là phù hợp với dòng), nhưng nó không bắt buộc mẫu phải khớp với toàn bộ dòng. POSIX chỉ định -xcờ để giới hạn khớp với các trường hợp trong đó mẫu phù hợp với toàn bộ dòng.
Chris Johnsen

@Chris: Bah, bắt tốt.
sepp2k

1

Sử dụng thông tin liên lạc!

comm -23 /etc/remotedomains remove

Từ trang người đàn ông:

So sánh các tệp được sắp xếp FILE1 và FILE2 theo từng dòng.

Không có tùy chọn, sản xuất đầu ra ba cột. Cột một chứa các dòng duy nhất cho FILE1, cột hai chứa các dòng duy nhất cho FILE2 và cột ba chứa các dòng chung cho cả hai tệp.

Tùy chọn -1, -2 và -3 vô hiệu hóa các cột tương ứng.

Tuy nhiên, nó yêu cầu các tập tin được sắp xếp.


0

sed -r -i -e '/^(domain1|domain2|domain3|...|domainN)$/d' domainlist.txt

Nếu danh sách tên miền cần xóa của bạn nằm trong một tệp thì:

sed -r -i -e '/^'"$(xargs <removelist.txt|sed -e 's/ /|/g)"')$/d' domainlist.txt

Ghi chú:

  1. Sử dụng -i.bak để có sed tạo bản sao lưu của domainlist.txt

  2. Nếu removeelist.txt có nhiều hàng ngàn mục, nó có thể vượt quá độ dài dòng lệnh tối đa. Đây không phải là một kịch bản rất có thể xảy ra nhưng một cái gì đó bạn nên nhận thức được.

Khi phản ánh thêm, rủi ro đó có thể được loại bỏ bằng:

for RE in $(xargs <removelist.txt|sed -e 's/ /|/g') ; \
  do sed -r -i -e '/^('"$RE"')$/d' domainlist.txt ; \
done
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.