Chciałbym użyć grep
z wyrażeniem PCRE zawierającym <
znak. Bash myśli, że chcę przekierować, ale nie chcę. Jak mogę uciec <
?
10
Chciałbym użyć grep
z wyrażeniem PCRE zawierającym <
znak. Bash myśli, że chcę przekierować, ale nie chcę. Jak mogę uciec <
?
Byłem w stanie to zrobić z odwrotnym ukośnikiem:
25 % grep \< xmospos.c
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <X11/Xlib.h>
Cytowany mniej niż i cytowany, odwrócony o mniej niż oba, dawał głupie odpowiedzi.
grep -oP '(?< )(.*)$'
na przykład nie działa z pojedynczymi cudzysłowami. Najpierw próbowałem.(?<! )(.*)$
czy(?<= )(.*)$
?Dwie proste zasady:
\C
unika następnego znaku, cokolwiek to jest, innego niż nowy wiersz.'text'
unikają znaków między nimi, w tym odwrotnego ukośnika, ale nie zawierają pojedynczego cudzysłowu (ponieważ oznacza on koniec cytowanego tekstu).A zatem:
Jeśli potrzebujesz przekazać argument zawierający pojedyncze cudzysłowy, możesz użyć
'\''
„do ucieczki” pojedynczego cudzysłowu w pojedynczych cudzysłowach. Technicznie rzecz biorąc, oznacza to zakończenie pierwszego tekstu dosłownego, następnie umieszczenie literału'
w tym samym słowie, a następnie bardziej dosłownego tekstu w tym samym słowie.Pozostałe zasady cytowania (podsumowane):
!"#$&'()*;<>?[\]^`{|}~
(innymi słowy, następujące znaki są bezpieczne: litery, cyfry%+,-./:=@_
i znaki spoza ASCII)."$\`
i (w powłokach z włączoną historią)!
. Odwrotny ukośnik między podwójnymi cudzysłowami pojawi się w ciągu, chyba że poprzedza jeden z nieliterowych znaków.Te zasady dotyczą bash i innych powłok w stylu Bourne'a (takich jak ash i ksh). Odnoszą się one również do zsh (z wyjątkiem tego, że
=
po spacji może być potrzebne cytowanie). Zasady w csh / tcsh i w Fish są różne.źródło