Cách đơn giản nhất để bình luận / bỏ ghi chú một số dòng nhất định bằng cách sử dụng dòng lệnh


37

Có cách nào để bình luận / bỏ ghi chú kịch bản shell / config / ruby ​​bằng dòng lệnh không?

ví dụ:

$ comment 14-18 bla.conf
$ uncomment 14-18 bla.conf

điều này sẽ thêm hoặc loại bỏ #dấu hiệu bla.conftrên dòng 14đến 18. Thông thường tôi sử dụng sed, nhưng tôi phải biết nội dung của các dòng đó và sau đó thực hiện thao tác tìm thay thế và điều đó sẽ cho kết quả sai khi có nhiều hơn một kim (và chúng tôi chỉ muốn thay thế N-th một).


1
Có một A đến Q này với tựa đề: uncommenting nhiều dòng mã, được xác định bởi số dòng, sử dụng vi hoặc vim mà chương trình nhiều phương pháp để thực hiện điều này bằng cách sử sed, perlvv Đặc biệt A bởi terdon!
slm

Câu trả lời:


46

Để bình luận dòng 2 đến 4 của bla.conf:

sed -i '2,4 s/^/#/' bla.conf

Để thực hiện lệnh mà bạn muốn, chỉ cần đặt phần trên vào tập lệnh shell có tên là comment:

#!/bin/sh
sed -i "$1"' s/^/#/' "$2"

Tập lệnh này được sử dụng giống như tập lệnh của bạn ngoại trừ các dòng đầu tiên và cuối cùng được phân tách bằng dấu phẩy chứ không phải dấu gạch ngang. Ví dụ:

comment 2,4 bla.conf

Một lệnh uncomment có thể được tạo tương tự.

Tính năng nâng cao

sedLựa chọn dòng của khá mạnh mẽ. Ngoài việc chỉ định các dòng đầu tiên và cuối cùng theo số, cũng có thể chỉ định chúng theo một biểu thức chính quy. Vì vậy, nếu bạn muốn chỉ huy tất cả các dòng từ một chứa foođến một chứa bar, hãy sử dụng:

comment '/foo/,/bar/' bla.conf

Hệ thống BSD (OSX)

Với BSD sed, -itùy chọn cần một đối số ngay cả khi nó chỉ là một chuỗi rỗng. Vì vậy, ví dụ, thay thế lệnh trên cùng bằng:

sed -i '' '2,4 s/^/#/' bla.conf

Và, thay thế lệnh trong tập lệnh bằng:

sed -i '' "$1"' s/^/#/' "$2"

1
Là gấp đôi 'sau khi -itùy chọn có chủ ý? Không cần chúng.
raphinesse

8

Với GNU sed (để thay thế các tệp tại chỗ bằng -itùy chọn):

sed -i '14,18 s/^/#/' bla.conf
sed -i '14,18 s/^##*//' bla.conf

2

Bạn có thể sử dụng Vim trong chế độ Ex:

ex -sc 'g/^\s*[^#]/s/^/#/' -cx bla.conf
ex -sc 'g/^\s*#/s/#//' -cx bla.conf
  1. g regex toàn cầu

  2. s thay thế

  3. x lưu và đóng


2

Bạn có thể tạo bash_file với các hàm để sử dụng lại nó trong các dự án của bạn

#!/bin/bash

# your target file
CONFIG=./config.txt

# comment target
comment() {
  sed -i '' "s/^$1/#$1/" $CONFIG
}

# comment target
uncomment() {
  echo $1
  sed -i '' "s/^#$1/$1/" $CONFIG
}


# Use it so:
uncomment enable_uart
comment arm_freq
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.