Cara paling sederhana untuk mengomentari / menghapus tanda komentar pada baris tertentu menggunakan baris perintah


37

Apakah ada cara untuk mengomentari / menghapus komentar skrip shell / config / ruby ​​menggunakan baris perintah?

sebagai contoh:

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

ini akan menambah atau menghapus #tanda on bla.confon line 14ke 18. Biasanya saya gunakan sed, tapi saya harus tahu isi dari garis-garis itu dan kemudian melakukan operasi find-replace, dan itu akan memberikan hasil yang salah ketika ada lebih dari satu jarum (dan kami hanya ingin mengganti N-th satu).


1
Ada A ke Q ini berjudul: beberapa baris uncommenting kode, yang ditentukan oleh nomor baris, menggunakan vi atau vim yang menunjukkan banyak metode untuk melakukan hal ini menggunakan sed, perl, dll Secara khusus A dengan Terdon!
slm

Jawaban:


46

Untuk mengomentari baris 2 hingga 4 dari bla.conf:

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

Untuk membuat perintah yang Anda inginkan, cukup masukkan perintah di atas ke dalam shell script bernama comment:

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

Script ini digunakan sama seperti milik Anda dengan pengecualian bahwa baris pertama dan terakhir harus dipisahkan oleh koma daripada tanda hubung. Sebagai contoh:

comment 2,4 bla.conf

Perintah tanda komentar dapat dibuat secara analog.

Fitur lanjutan

sedPilihan jalur cukup kuat. Selain menentukan baris pertama dan terakhir berdasarkan nomor, juga dimungkinkan untuk menentukannya dengan regex. Jadi, jika Anda ingin memerintahkan semua baris dari baris yang berisi foobaris yang berisi bar, gunakan:

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

Sistem BSD (OSX)

Dengan sed BSD, -iopsi membutuhkan argumen bahkan jika itu hanya string kosong. Jadi, misalnya, ganti perintah teratas di atas dengan:

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

Dan, ganti perintah dalam skrip dengan:

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

1
Apakah dobel 'setelah -iopsi disengaja? Tidak membutuhkannya.
raphinesse


2

Anda dapat menggunakan Vim dalam mode Ex:

ex -sc 'g/^\s*[^#]/s/^/#/' -cx bla.conf
ex -sc 'g/^\s*#/s/#//' -cx bla.conf
  1. g regex global

  2. s pengganti

  3. x Simpan dan tutup


2

Anda dapat membuat bash_file dengan fungsi untuk menggunakannya kembali di proyek Anda

#!/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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.