Sepertinya Anda punya file konfigurasi. Apa yang dapat Anda lakukan mirip dengan apa yang disarankan Adam Siemeon / slm:
sed -nr 's/[^=]+=\s*(.+)$/\1/p' filename
di mana [^=]
tidak termasuk semua '=' karakter, +
kata salah satu atau lebih dari jenis yang sama dari karakter, ini diikuti oleh yang sebenarnya =
, \s
setiap spasi (termasuk tab \t
dan baris baru \n
, \r\n
, dan ruang polos '', sedangkan *
berarti nol atau lebih dari jenis yang sama , tanda kurung menangkap apa yang ada di dalam untuk menempatkan urutan karakter yang cocok ke dalam penampung pengganti \ 1, \ 2, ..., \ n, $
berarti akhir dari sebuah baris. Ini mengikuti pola penggantian khas:. s/.../.../modifiers
Opsi baris perintah -r
adalah singkatan dari sintaks regex diperpanjang (sebagai masalah kenyamanan) dan -n
berarti tidak menghasilkan apa-apa sampai atau kecuali diminta secara eksplisit. p
Pengubah mencetak hasil.
Anda dapat melakukan pencarian global dengan g
pengubah seperti:
sed -nr 's/[^=]+=\s*(.+)$/\1 /pg' filename # note the space after \1
sehingga Anda mendapatkan string dipisahkan oleh ' '
(bisa \n
, \t
atau apa yang harus Anda) yang dapat Anda memproses dengan mudah.
Keduanya valid asalkan nilai Anda didahului oleh rentang karakter persamaan hingga akhir baris dan tidak diikuti oleh komentar atau karakter lain dengan semantik yang menyimpang dari "nilai" sederhana.
Edit:
Saya belum bisa berkomentar di sini tentang posting orang lain. Untuk menunjukkan baris, cukup lewati nomor baris, dalam kasus Anda 3, sebelum s
atau sebelum tanda kutip yang dimulai (seperti dalam vim).
sed -nr '3s/[^=]+=\s*(.+)$/\1/p' filename
Silakan lihat info sed
. Misalnya, 3.2 dan 4.7 menarik bagi Anda.
awk
perintah bagus - tetapi hanya jika Anda punya ruang di sekitar=
. Itu tidak akan berhasilPOP3_SERVER_NAME=localhost
.