Cách xóa các dòng cụ thể khỏi tệp bằng sed

Trong những trường hợp nhất định, chúng tôi cần xóa một dòng cụ thể khỏi một hoặc một số tệp, ví dụ, tôi đã xảy ra với tôi rằng tôi đã có toàn bộ danh sách các tệp và tôi cần xóa dòng số 27 trong số này (dòng số 27 là dòng ACL , quy chuẩn, quy tắc, cấu hình), tôi có thể chỉnh sửa từng tệp hoặc tôi có thể đạt được những gì tôi cần bằng lệnh khát và một tập lệnh bash (tùy chọn).

Tuy nhiên, hãy thử một tệp đơn giản.

Chúng tôi có tệp bản phân phối-deb.txt chứa cái này:

debian

Ubuntu

archlinux

chất tan

bạc hà

Đó là, tệp bản phân phối-deb.txt trong đó chúng ta sẽ đặt các bản phân phối dựa trên Debian, nhưng ở dòng số 3 có "Archlinux", một bản phân phối rõ ràng không liên quan gì đến Debian, vì vậy chúng ta phải loại bỏ dòng đó. Để loại bỏ dòng số 3 của tệp đó, chúng tôi sẽ đặt như sau:

sed "3d" distros-deb.txt > distros-deb-ok.txt

Giải thích dòng này hơi dễ, với khát "3d" chúng tôi cho biết rằng chúng tôi sẽ xóa dòng số 3, với bản phân phối-deb.txt Chúng tôi cho biết tệp nào sẽ hoạt động, tức là xóa dòng số 3 của tệp này, đến đây nếu chúng tôi nhấn Enter, nó sẽ hiển thị cho chúng tôi những gì chúng tôi muốn nhưng trong thiết bị đầu cuối, vì vậy với > distros-deb-ok.txt chúng tôi chỉ ra rằng thay vì hiển thị kết quả trong terminal, nó sẽ đặt nó vào một tệp có tên này.

Đơn giản là gì?

Ngoài ra, chúng ta có thể tránh sử dụng > distros-deb-ok.txt sử dụng một tham số thích hợp của khát, thông số -i

Tức là, trong trường hợp chúng ta muốn xóa dòng khỏi tệp và lưu nó với cùng tên (chứ không phải trong tệp khác), chỉ cần thêm tham số -i :

sed -i "3d" distros-deb.txt

Thao tác này sẽ xóa dòng số 3 khỏi distros-deb.txt và lưu nó.

Điều gì xảy ra nếu tôi muốn có một loạt các dòng, nghĩa là loại bỏ dòng # 3 mà còn cả # 4 và # 5? Để đạt được điều này, chúng tôi đặt phạm vi từ 3 đến 5, nghĩa là:

sed -i "3,5d" distros-deb.txt

Và nó sẽ chỉ hiển thị cho tôi debian và kubuntu 

Vậy nếu tôi muốn xóa từ dòng 2 đến dòng cuối cùng, khi tôi không biết tổng số dòng thì sao?

Chỉ cần sử dụng ký hiệu đô la - »$

sed -i "2,$d" distros-deb.txt

Trong trường hợp bạn muốn loại bỏ từ dòng đầu tiên xuống # 4 thì chúng tôi chỉ cần đặt giá trị 1 ở đầu:

sed -i "1,4d" distros-deb.txt

Đây là tất cả mọi thứ, một mẹo rất hữu ích khi bạn muốn tạo tập lệnh bash để tự động hóa các tác vụ và bạn cần sửa đổi và loại bỏ các dòng tệp cấu hình, để sửa đổi chúng ta có thể sử dụng khát o perl, cũng như để loại bỏ chúng ta đã biết cách thực hiện với sed 

Liên quan


Thêm vào danh sách nguồn ưu tiên trên Google.