GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan Referensi Ke Variabel Bash String Di Sed?

Saya seorang pemula Linux yang relatif. Misalkan saya memiliki file teks a.txt yang berisi teks berikut:

A
B
C

Sekarang, jika saya ingin mengubah teks pada baris 2 (yang berisi B ), saya dapat menggunakan sed berikut ini perintah:

sed -i '2s/^.*$/X/' a.txt

untuk mengubah B ke X , misalnya.

Tapi sekarang misalkan saya ingin menulis sed perintah yang mengubah teks pada baris 2 menjadi sesuatu yang termasuk variabel string bash. Saya ingin mengubah teks pada baris 2 menjadi fname="myaddress" , di mana tanda kutip disertakan secara eksplisit, dan di mana myaddress adalah variabel string bash (didefinisikan di tempat lain). Untuk mencoba melakukan ini, saya telah membuat skrip bash shell bernama mytest.sh dan berisi sebagai berikut:

#!/bin/bash

myaddress="/home/"
echo fname="$myaddress"

head a.txt
sed -i '2s/^.*$/fname="$myaddress"/' a.txt
head a.txt

Sekarang, echo fname="$myaddress" mencetak fname="/home/" , yang merupakan teks yang saya inginkan berada di baris 2 a.txt . Namun, sed sebagai gantinya mencetak fname="$myaddress" ke baris 2 dari a.txt , mungkin karena berada di dalam apostrof di sekitarnya. Dengan kata lain, output dari skrip bash shell di atas adalah:

fname="/home/"
A
B
C

A
fname="$myaddress"
C

Pertanyaan saya adalah, bagaimana saya bisa mendapatkan sed untuk benar-benar mencetak nilai disimpan di myaddress dan dirujuk oleh $myaddress ?

Jawaban yang Diterima:

Ada dua masalah:Pertama, seperti yang telah dicatat oleh Kevin, variabel shell harus diapit tanda kutip ganda jika ingin diekspansi oleh shell. Kedua, string pengganti Anda berisi / , jadi Anda tidak dapat menggunakan / sekaligus sebagai pembatas untuk sed . Jika Anda mengetahui beberapa karakter tersebut, ucapkan , , pasti tidak akan muncul dalam string pengganti, Anda dapat menggunakan karakter itu sebagai sed pembatas, jadi Anda mendapatkan

sed -i '2s,^.*$,fname="'"$myaddress"'",' a.txt

Linux
  1. Skrip bash(I)

  2. Bungkus Karakter Pertama Dari Sebuah String Menggunakan Sed?

  3. Menetapkan Hanya Bagian Dari String Ke Variabel Di Bash?

  1. Menggunakan grep dan sed untuk mencari dan mengganti string

  2. Menggunakan sed untuk membagi string dengan pembatas

  3. menggunakan acak untuk menghasilkan string acak di bash

  1. Gunakan Sed Untuk Menambahkan Karakter Di Posisi Ke-N Dari String Yang Cocok?

  2. Penggantian String Menggunakan Kamus?

  3. Alias ​​​​dengan variabel di bash