Saya ingin tahu apakah ada cara yang saya bisa cat
suka php.ini
dan hapus semua baris dimulai dengan;
Misalnya, jika file tersebut berisi ini:
; - Show all errors, except for notices
;
;error_reporting = E_ALL & ~E_NOTICE
;
; - Show only errors
;
;error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR
;
; - Show all errors except for notices
;
error_reporting = E_ALL & ~E_NOTICE
dan saya menjalankan perintah yang benar cat | {remove comments command}
, maka saya akan berakhir dengan:
error_reporting = E_ALL & ~E_NOTICE
Catatan - Saya berasumsi bahwa cat
akan menjadi cara terbaik untuk melakukan ini tapi aku benar-benar baik-baik saja dengan jawaban menggunakan utilitas lain seperti awk
, sed
, egrep
, dll
error_reporting = E_ALL & E_NOTICE ; Show all errors, except for notices
? Haruskah komentar dihapus dalam kasus itu juga?cat
adalah alat untuk menggabungkan file.grep
adalah alat untuk menyaring garis berdasarkan pola.sed
danawk
juga dapat memodifikasi garis-garis itu.Jawaban:
Anda dapat gunakan:
sumber
Anda tidak perlu mem-pipe file melalui grep, grep mengambil nama file sebagai argumen baris perintah.
akan mencetak semua baris KECUALI yang dimulai dengan # char. Anda dapat mengubah karakter komentar menjadi apa pun yang Anda inginkan.
Jika Anda memiliki lebih dari satu komentar char (asumsi di awal baris)
sumber
grep '^[^;]' filename
. Saya tidak bisa berbicara dengan portabilitasnya!egrep
adalahgrep -E
. Anda juga dapat menggunakangrep -ve '^[;#]' -e '^//'
egrep
dapat menghemat penggunaancat
. Dengan kata lain, buat lebih sedikit proses (egrep
vscat
+egrep
) dan gunakan lebih sedikit buffer (pipa daricat
keegrep
vs tidak ada pipa).Biasanya merupakan ide bagus untuk membatasi penggunaan
cat
jika Anda hanya ingin meneruskan file ke perintah yang dapat membacanya sendiri.Dengan ini, perintah berikut akan menghapus komentar, bahkan jika mereka diberi spasi atau tab:
sumber
[[
kelas karakter yang lebih baru]]
dengan penggunaanegrep
perintah yang ditinggalkan selama setidaknya satu dekade atau lebih.yang akan mengecualikan baris yang dimulai dengan ';', dan baris kosong.
dalam regex,
^
menunjukkan awal dari suatu garis, dan$
akhir dari suatu garis, jadi^$
tentukan garis-garis di mana awal dari karakter garis dan akhir dari karakter garis berada tepat di sebelah satu sama lain.sumber
egrep -v '^;'
egrep -v '^[[:blank:]]*;' file.ini
Sebuah sederhana
awk
satu-kapalawk '/^;/{next}1' input_file
harus melakukan trik.sumber
awk '!/^;/' input_file
sudah.Seperti halnya Jaypal, saya juga kemungkinan besar akan menggunakan
awk
untuk tujuan ini. Lebih buruk lagi bahwa perl kadang-kadang sangat berguna untuk tujuan seperti:Perl regexps lebih kuat dibandingkan dengan awk dan kadang-kadang Anda mungkin membutuhkannya.
sumber
perl -ne 'print unless /^;/' data.txt
cat
berfungsi dengan baik dalam contoh-contoh ini jika Anda menganggapnya sebagai proxy untuk "segala sesuatu yang menghasilkan teks pada STDOUT" yang lebih umum. Pipa Unix adalah yang terbaik sejak irisan roti, imho. :)Elaborasi pada jawaban @ shabunc, ini menggunakan Perl untuk menghapus komentar (termasuk komentar sebaris), lalu mencetak baris apa pun yang berisi apa pun selain spasi.
Penjelasan:
s/;.*//
menggunakan operator substitusi (s/<regex>/<replacement>/
) untuk mengganti instance dari titik koma dan segala sesuatu yang mengikutinya pada baris dengan string kosong.print if /\S/
mencetak baris jika cocok dengan regexp\S
, yang merupakan kelas karakter yang cocok dengan semua karakter non-spasi.sumber
Inilah yang saya gunakan, ganti saja ';' dengan karakter komentar (mis. '#' untuk banyak file konfigurasi layanan UNIX):
Itu menghilangkan semua komentar seluruh baris (bahkan jika mereka memiliki spasi putih), dan komentar apa pun yang mengakhiri baris non-komentar, dan secara ringkas menghapus baris kosong dari output juga. Ini mungkin dapat dilakukan tanpa pipa (sed-atau awk-fu saya diakui tidak bagus), tetapi sangat mudah bagi saya untuk memahami (dan ingat), saya pikir saya akan mempostingnya di sini.
sumber
Contoh hanya tampilkan baris + jangan tampilkan baris baru atau baris emtpy:
ATAU
sumber
egrep
sudah lama ditinggalkan.grep -E
adalah perintah yang Anda cari di sini.Hapus semua komentar dan baris kosong dari file.txt
sumber
egrep
disusutkan. Gunakangrep -Ev
sebagai gantinya.Akan menelanjangi juga baris kosong
sumber
Anda dapat menggunakan perintah berikut untuk menyimpan baris, tidak termasuk baris kosong dan baris yang dimulai dengan # dalam file baru
cat <file to be read> | egrep -v '^#|^$' > <file to be written at>
sumber
cat
Pipa tidak berguna danegrep
disusutkan dan diganti dengangrep -E
untuk ekspresi diperpanjang atau adilgrep -v
.