Caranya cukup mudah, tidak menggunakan sed
, tetapi dengan alat shell yang sesuai. Pertama, jika Anda perlu mempertahankan sample
dalam variabel untuk digunakan nanti, maka sesuatu seperti berikut ini akan bekerja menggunakan bash substring replacement untuk mengisolasi sample
di Test:/database: baris:
$ db=$(grep -A3 'test:' database.yml | tail -n1); db=${db//*database: /}; echo "$db"
sample
atau untuk solusi yang lebih pendek yang dapat Anda buang ke baris perintah, hapus variabel dan substitusi perintah dan gunakan alat seperti cut
:
$ grep -A3 'test:' database.yml | tail -n1 | cut -c 13-
sample
atau, dengan awk
, cukup:
$ grep -A3 'test:' database.yml | tail -n1 | awk '{ print $2}'
sample
Semua cara yang berbeda dapat digunakan di dalam penggantian perintah (mis. var=$(stuff)
) untuk menyimpan sample
di var
, ini hanya masalah yang ingin Anda gunakan. Saya rasa Anda mengerti.
Ada alat yang lebih baik daripada sed
. Anda mungkin terjebak pada sistem minimal, tetapi orang lain yang mencari jawaban mungkin tidak.
Versi python dari yq bertindak seperti jq:
$ pip3 install yq
$ yq -r .test.database database.yml
sample
shyaml juga berfungsi, tetapi memiliki batasan aneh yang hanya dapat Anda alihkan ke dalamnya:
$ pip3 install shyaml
$ shyaml get-value test.database < database.yml
sample
Jika perl
ada dan Anda telah menginstal YAML:
$ cpan YAML
$ perl -MYAML -le 'print YAML::LoadFile(shift)->{test}{database}' database.yml
sample
Atau, jika Anda ingin ruby
:
$ ruby -r yaml -e 'puts YAML.load_file(ARGV[0])["test"]["database"]' database.yml
sample