Saya memiliki string seperti AxxBCyyyDEFzzLMN dan saya ingin mengganti semua kemunculan x , y , dan z dengan _ .
Bagaimana saya bisa mencapai ini?
Saya tahu itu echo "$string" | tr 'x' '_' | tr 'y' '_'
akan berhasil, tetapi saya ingin melakukannya dalam sekali jalan, tanpa menggunakan pipa.
AxyzB
? Tiga garis bawah atau satu?tr '[xyz]'
akan menggantikan[
dan]
juga. Argumennya harus berupa daftar karakter (meskipun rentang sepertia-z
boleh saja, dan dalam beberapa implementasi, kelas karakter POSIX suka[:digit:]
).Jawaban:
akan mengganti setiap terjadinya
x
,y
atauz
dengan_
, memberikanA__BC___DEF__LMN
dalam contoh Anda.akan menggantikan kejadian berulang
x
,y
atauz
dengan tunggal_
, memberikanA_BC_DEF_LMN
dalam contoh Anda.sumber
,[]{}()~
karakter. Saya ingin menggantinya dengan setiap karakter khusus lolos dengan'\'
bagaimana saya bisa menyelesaikan ini dengan oneshot?gsed
binary:$ brew install gnu-sed
then$ gsed -r 's/[xyz]+/_/g'
sed -E
pada dasarnya setara dengansed -r
pada banyak distro Linux, Jika Anda menggunakan,sed 's/[xyz][xyz]*/_/g'
Anda tidak memerlukan opsi. Tentu saja, ini setara dengantr -s xyz _
jadi tidak perlu dised
sini.tr
untuk itu.sed 's/[][{}()~,]/\\&/g'
tapi sungguh, ajukan pertanyaan baru jika Anda memiliki pertanyaan lanjutan (silakan tautkan kembali ke sini untuk referensi, tentu saja). Kebetulan,,
dan~
bukan regex metacharacters (meskipun~
akan diperluas ke$HOME
dalam beberapa posisi oleh Bash dan beberapa shell lainnya;sh
namun tidak ).Menggunakan Bash Parameter Expansion :
sumber
bash
. Kerang lain mungkin tidak berfungsi (meskipun beberapa akan).sed
jika bash memiliki subtitusi bawaan ?Anda mungkin menemukan tautan ini bermanfaat:
http://tldp.org/LDP/abs/html/string-manipulation.html
Secara umum,
Untuk mengganti kecocokan pertama dari $ substring dengan $ replacement:
Untuk mengganti semua kecocokan $ substring dengan $ replacement:
EDIT: Perhatikan bahwa ini berlaku untuk variabel bernama $ string.
sumber
^ gunakan sebanyak mungkin yang Anda butuhkan, dan Anda dapat membuat enkripsi BASIC Anda sendiri
sumber
Berikut ini adalah solusi dengan ekspansi parameter shell yang menggantikan beberapa kejadian yang berdekatan dengan satu
_
:Perhatikan bahwa polanya memerlukan pencocokan pola yang diperluas, diaktifkan dengan
+(pattern)
Atau, dengan opsi
-s
("pemerasan") daritr
:sumber