Burada iki yorumlama seviyesi vardır: kabuk ve sed.
Kabukta, tek tırnaklar arasındaki her şey, tek tırnak işaretleri dışında, kelimenin tam anlamıyla yorumlanır. Yazılarla tek tırnaklar arasında tek bir alıntıyı etkin bir şekilde kullanabilirsiniz '\''
(tek teklifi kapat, tek harfli tek teklifi, tek teklifi aç).
Sed, temel düzenli ifadeleri kullanır . Bir BRE'de, kelimenin tam anlamıyla $.*[\^
işlem görmeleri için, karakterlerin iç karakter kümeleri ( […]
) hariç, bunlardan önce bir ters eğik çizgi ile alıntılanması gerekir . Harfler, rakamlar ve (){}+?|
alıntı yapılmamalıdır (bazı uygulamalarda bunlardan bazılarını alıntı yaparak kaçabilirsiniz). Sekansları \(
, \)
, \n
ve bazı uygulamalarda \{
, \}
, \+
, \?
, \|
ve diğer eğik çizgi + alfasayısal özel anlamları vardır. $^
Bazı uygulamalarda bazı pozisyonlarda alıntı yapmaktan kaçınabilirsiniz .
Ayrıca, /
parantez ifadelerinin dışındaki regex'te görünmek için önce bir ters eğik çizgi gerekir . Bunu yazılı tarafından ayırıcı olarak alternatif bir karakter seçebilir, örneğin s~/dir~/replacement~
ya \~/dir~p
; BRE'ye eklemek istiyorsanız, sınırlayıcıdan önce bir ters eğik çizgiye ihtiyacınız olacaktır. Bir BRE'de özel bir anlamı olan bir karakter seçtiyseniz ve kelimenin tam anlamıyla eklemek istiyorsanız, üç ters eğik çizgi gerekir; Bazı uygulamalarda farklı davranabileceğinden, bunu önermiyorum.
Özetle, için sed 's/…/…/'
:
- Regex'i tek tırnak arasında yazın.
'\''
Regex'te tek bir alıntı yapmak için kullanın .
$.*/[\]^
Sadece bu karakterlerden önce ve sonra ters eğik çizgi koyun (ancak parantez ifadelerinin içinde değil). (Teknik olarak daha önce ters eğik çizgi koymamalısınız, ]
ancak parantez ifadelerinin dışında ]
ve \]
farklı şekilde işleyen bir uygulama bilmiyorum .)
- Bir parantez ifadesinin içinde,
-
kelimenin tam anlamıyla ele alınmak üzere ilk veya son ( [abc-]
veya [-abc]
değil [a-bc]
) olduğundan emin olun .
- İçin parantez ifadelerinde içinde,
^
kelimenin tam anlamıyla tedavi edilmesi, emin yapmak değil (kullanım ilk [abc^]
değil [^abc]
).
- Dahil etmek için
]
bir braket ifadesinin eşleştiği karakterlerin listesinde, bu (veya ilk sonraki ilk karakteri yapmak ^
bir reddedildiği seti için): []abc]
ya [^]abc]
(değil [abc]]
ne de[abc\]]
).
Yeni metinde:
&
ve \
sınırlayıcı (genellikle /
) ve newlines gibi, onlardan önce bir ters eğik çizgi ile alıntı yapılmalıdır .
\
ardından bir rakamın özel bir anlamı vardır. \
ardından bir harfin bazı uygulamalarda özel bir anlamı (özel karakterler) vardır ve \
ardından diğer bazı karakter araçları \c
veya c
uygulamaya göre değişir.
- Bağımsız değişken (
sed 's/…/…/'
) etrafındaki tek tırnak işaretleri ile '\''
değiştirme metnine tek bir teklif koymak için kullanın .
Düzenli ifade veya değiştirme metni bir kabuk değişkeninden geliyorsa, bunu unutmayın.
- Düzenli ifade bir BRE'dir, değişmez bir dizedir.
- Düzenli ifadede, bir yeni satırın
\n
( sed
desen alanına yeni satır karakterleri ekleyen başka bir kodunuz olmadığı sürece asla eşleşmeyecek) olarak ifade edilmesi gerekir . Ancak, bazı sed
uygulamalarla birlikte parantez ifadelerinde işe yaramayacağını unutmayın .
- Yedek Metinde,
&
, \
ve satırbaşları alıntı gerekmektedir.
- Sınırlayıcının alıntılanması gerekir (ancak parantez ifadelerinin içinde değil).
- Enterpolasyon için çift tırnak kullanın:
sed -e "s/$BRE/$REPL/"
.
function sedPath { path=$((echo $1|sed -r 's/([\$\.\*\/\[\\^])/\\\1/g'|sed 's/[]]/\[]]/g')>&1) } #Escape path for use with sed