Apa arti karakter # dalam: / bin / sed -e # abc # zzz # g '?

10

Apa arti #karakter di baris ini:

/bin/sed -e 's#abc#zzz#g'
Khalith Basha
sumber

Jawaban:

14

Itu pemisah, sama seperti "/", itu sama dengan 's/abc/zzz/g'.

itu berarti mencari "abc" menggantikannya dengan "zzz", dengan bendera global, berarti melakukannya untuk semua "abc" di telepon, bukan hanya yang pertama.

Anda juga dapat menggunakan pemisah alternatif untuk alamat pola, tetapi dalam hal ini, Anda harus menghindarinya agar dapat ditafsirkan dengan benar:

sed -r '\#abc#p'
Ravexina
sumber
24

Ini pembatas atau pemisah. Yang paling umum digunakan adalah /seperti pada

sed 's/old/new/' file

Tapi sed akan mengambil karakter pertama setelah perintah sebagai pembatas. Anda dapat menggunakan karakter apa pun yang nyaman, misalnya ...

sed 's%old%new%' file

Ini sangat berguna jika file tersebut berisi /(atau karakter pembatas konvensional lainnya). Anda dapat memilih sebagai pemisah beberapa karakter yang Anda tahu tidak perlu dimasukkan ke dalam sedekspresi Anda , sehingga Anda tidak perlu repot melarikan diri.

Katakanlah Anda ingin mengganti

/ubuntu//questions

dengan

/ubuntu//posts

Anda bisa menggunakannya

sed 's/https:\/\/askubuntu.com\/questions/https:\/\/askubuntu.com\/posts/' file

Tapi lebih baik digunakan

sed 's|/ubuntu//questions|/ubuntu//posts|' file
Zanna
sumber
Mungkin perlu dicatat bahwa setidaknya dalam GNU sed, /dapat digantikan oleh karakter alternatif dalam konteks selain dari perintah s(pengganti) - tetapi dalam hal itu perlu untuk melarikan diri pertama kali misalnya sed '/foo/d'(menghapus pencocokan garis foo) menjadised '\#foo#d'
steeldriver
@steeldriver memang! - Saya melihat bahwa Ravexina menambahkan itu pada jawabannya, jadi saya mungkin akan meninggalkan milik saya :)
Zanna
1
Tidak penting apakah aliran mengandung karakter pemisah. Yang penting adalah apakah string pencarian atau string pengganti berisi karakter pemisah.
kasperd
@kasperd oh ya, benar. Saya sedikit diedit :)
Zanna
Jawaban @ Zanna lebih tepatnya: Karakter pertama setelah perintah "s" menentukan pemisah yang digunakan dalam perintah ini. Anda dapat menggunakan karakter apa pun di sini. sbabebmelakukan hal yang sama dengan s/a/e/.
rexkogitans