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 tôi đã biết cách làm điều đó với sed 😉
Liên quan
Đóng góp rất tốt 😉
thanks
Nhân tiện, chúng tôi đã nhận được email của bạn ngay bây giờ, tôi sẽ trả lời bạn 😀
Liên quan
Với tư cách là thầy tu cao cấp của thiết bị đầu cuối, máy chủ và kết nối ssh, tôi đến với bạn, tuyệt vời KZKG ^ Gaara, và tôi hỏi bạn: tôi có thể lấy hướng dẫn ở mức độ thiếu hiểu biết của mình ở đâu cho phép tôi sử dụng kết nối ssh giữa hai máy từ xa trên các mạng khác nhau để chia sẻ các tập tin văn bản, pdf, hình ảnh và âm thanh (mp3)….
????
Nghiêm túc đấy, bạn có thể hướng dẫn tôi vấn đề này không, tôi có hai máy, một máy ở cơ quan và một máy ở nhà và tôi cần kết nối ssh giữa chúng (vì theo tôi hiểu, ssh cho phép chia sẻ nội dung giữa các máy, tôi nói đúng không?
Và nếu tôi sai, bạn giới thiệu ứng dụng nào?
Và tôi phải tìm một hướng dẫn cơ bản về vấn đề này ở đâu?
scp
scp user @ machine_address: đường dẫn user @ machine_address: đường dẫn.
Cú pháp tương tự như cp, nguồn -> đích.
Bạn đã xuất hiện, bạn đã bị mất.
Mẹo tốt!
Mẹo thú vị… xD
Bạn có tình cờ biết một thứ làm cho văn bản in đậm nổi bật không?
Ý tôi là, tôi có một tệp txt là một từ điển, nó có hơn 10000 dòng và tôi muốn nó làm nổi bật văn bản nhất định trước các điểm tạm ngưng ":" và làm từng cái một là quá nhiều.
Xin chào,
Một tệp txt là văn bản thuần túy, như tên gọi của nó ... đơn giản, không có định dạng hoặc bất kỳ điều gì tương tự, tôi xin lỗi nhưng tôi nghĩ rằng những gì bạn yêu cầu không thể thực hiện được, có thể không? 🙁
Liên quan
thực sự nó có thể, nhưng bạn sẽ phải biết định dạng đích.
ví dụ:
echo $ (echo "Robert: Xin chào. Thay đổi ở đây" | sed 's / \ ./. \\ e [40; 31m /; s / \: /: \\ e [40; 35m /')
đó là một vấn đề đối phó.
cách khác để xóa có thể được sử dụng là sed '/' $ 1 '/ d' nhưng bạn phải chắc chắn về điều đó.
sau đó hoàn tất lưu nó trong * .odt
Không có cách nào dễ dàng hơn để làm điều đó với LibreOffice?
Bạn có thể xóa một phần của dòng và để lại phần còn lại không?
Giả sử tôi muốn xóa mọi thứ trước một từ trong một hàng nhất định.
Hoặc xóa mọi thứ theo sau từ đó.
Vâng, đó là vấn đề của việc kéo một regex (nếu cần thì man sed -r, –regexp-Extended)
Bắt đầu từ những gì tôi tìm thấy
echo «Robert: Xin chào. Thay đổi tại đây »| sed 's / Thay đổi //'
với một mẫu được xác định rõ ràng và với. (một ký tự) và * (nhiều hơn một)
Sau đó:
echo «Robert: Xin chào. Thay đổi tại đây »| sed 's / Thay đổi. * //'
Trước:
echo «Robert: Xin chào. Thay đổi tại đây »| sed 's /. * Thay đổi //'
Nếu từ đó xuất hiện quan trọng
echo «Robert: Xin chào. Thay đổi tại đây »| sed 's / Thay đổi. * / Thay đổi /'
hoặc phức tạp hơn
trong dòng chứa Robert những gì xảy ra sau Thay đổi
echo -e «Fritz: Xin chào. Thay đổi ở đây \ nRobert: Xin chào. Thay đổi tại đây »| sed '/Robert/s/Cambio.*//'
hoặc như ở phần đầu, hãy lấy ra dòng thứ hai và xử lý phần còn lại
echo -e «Fritz: Xin chào. Thay đổi ở đây \ nRobert: Xin chào. Thay đổi ở đây \ nKhác »| sed -e 2d -e 's / Thay đổi. * //'
echo -e «Fritz: Xin chào. Thay đổi ở đây \ nRobert: Xin chào. Thay đổi ở đây \ nKhác »| sed '2d; s / Thay đổi. * //'
Cảm ơn bạn, nó rất hữu ích cho tôi.
Bài viết hay, tôi thích, SysAdmin tuyệt vời làm sao!
Cuộc sống của chúng ta sẽ ra sao nếu không có sed, awek, perl, grep, tail, head, "Emacs" và rất nhiều công cụ thiết yếu khác !?
Cảm ơn, nó rất hữu ích.
Xin chào, và làm thế nào bạn có thể xóa các dòng 1,4 và 10 khỏi một tệp trong cùng một lệnh?