Saya ingin melakukan grep \resources\
. Bagaimana saya melakukan ini?
Saya sudah mencoba:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
grep
regular-expression
Tom Medley
sumber
sumber
grep '\\resources\\'
Jawaban:
Backslash adalah karakter khusus untuk banyak aplikasi:
termasuk shell: Anda perlu menghindarinya menggunakan backslash lain atau lebih elegan, menggunakan tanda kutip tunggal jika mungkin:
Di sini perintah menerima dua argumen dengan nilai
foo\bar
, yang digemakan apa adanya di terminal.(Di atas, saya menggunakan
printf
bukanecho
karena banyakecho
implementasi juga melakukan interpretasi backslash mereka sendiri (di sini akan berkembang\b
menjadi karakter backspace)).Tetapi backslash juga merupakan karakter khusus untuk
grep
. Perintah ini mengakui banyak urutan khusus seperti\(
,\|
,\.
, dan sebagainya. Jadi, Anda juga perlu memberi makan grep dengan double\\
untuk karakter backslash yang sebenarnya. Ini berarti menggunakan shell Anda perlu mengetik:atau yang setara:
(kedua baris memberitahu shell untuk mengirimkan
foo\\bar
sebagai argumen untukgrep
).Banyak perintah lain menafsirkan garis miring terbalik dalam beberapa argumen mereka ... dan diperlukan dua tingkat pelarian (satu untuk menghindari interpretasi shell, satu untuk melarikan diri dari interpretasi perintah).
Ngomong-ngomong, untuk shell, tanda kutip tunggal
'…'
mencegah segala jenis interpretasi karakter, tetapi tanda kutip ganda hanya mencegah beberapa di antaranya: khususnya$
,`
dan\
tetap karakter aktif di dalamnya"…"
.sumber
Anda juga dapat menggunakan
fgrep
(yang hanyagrep
dengan-F
bendera). Ini memaksa grep untuk menginterpretasikan pola sebagai string yang tetap (yaitu akan memperlakukan\
sebagai literal\
). Anda masih harus melindungi backslash dari ekspansi oleh shell.sumber
..\
dan bahkan dengan'..\\'
saya tidak mendapatkan hasil yang saya inginkan.grep -F '..\'
mendapat apa yang saya inginkan! Terima kasihgrep
membutuhkan empat backslashes untuk mewakili garis miring terbalik:sumber
grep
hanya membutuhkan 1 backslash untuk keluar dari backslash lain, tetapi shell juga membutuhkan backslash untuk dikutip. Kutipan ganda ("
) JANGAN mengutip backslash, tetapi backslash tidak, itulah sebabnya tanda kutip ganda dalam contoh Anda tidak melakukan apa pun dan 4 backslash diperlukan.grep
.