mam
Wejście:
NISHA =\455
Wynik:
NISHA = 455
Chcę usunąć \
z danych wyjściowych. Próbowałem użyć polecenia, sed "s/[\]//g" P
ale nie działa i oznacza błąd:
character found after backslash is not meaningful
sed
regular-expression
yisha
źródło
źródło
sed
(a może uruchamiasz to polecenie z powłoki innej niż POSIX?). Nie trzebased
jednaktr
wystarczy:tr -d '\\' < P
.Odpowiedzi:
Można zastąpić ukośnik odwrotny spacją, jak pokazano w przykładowym wyniku:
lub możesz go usunąć, jak pokazano w kodzie:
Znaki specjalne
Możliwe są problemy z ucieczką odwrotnego ukośnika, aby anulować jego specjalne znaczenie. Odwrotny ukośnik to specjalny znak używany do ucieczki zarówno w powłoce, jak i wyrażeniach regularnych.
Polecenie, które wpisujesz do wiersza poleceń powłoki lub skryptu, jest najpierw przetwarzane przez powłokę, która interpretuje specjalne znaczenie znaków i ich ucieczkę. Wynik jest następnie przekazywany do polecenia, które ma zostać wykonane (jak
sed
), które wykonuje własną interpretację znaków. Podczas konstruowania polecenia procedura mentalna jest odwrotna: najpierw dodaj znak ucieczki dla wyrażenia regularnego, a następnie dodaj znak ucieczki dla powłoki.W regex (wejście do poleceń takich jak
sed
,grep
etc.) backslash można uciec przez backslashem tak:\\
a także można wykorzystać zestaw wyrażenia[\]
jak dawniej, ponieważ nie backslash traci swoje specjalne znaczenie.W powłoce (jak
bash
) możesz uciec od ukośnika odwrotnego. Więc zamiast\
pisać\\
. Umieszczenie ciągu między podwójnymi cudzysłowami"
powoduje, że zachowanie odwrotnego ukośnika jest bardziej skomplikowane <1>, ale podwójny odwrotny ukośnik nadal powoduje powstanie pojedynczego odwrotnego ukośnika. Umieszczenie ciągu między pojedynczymi cudzysłowami'
powoduje, że każdy znak należy traktować dosłownie, z wyjątkiem'
.Jeśli chcesz użyć podwójnych cudzysłowów , możesz użyć jednego z następujących poleceń :
sed "s/\\\\//g"
- Ucieczka\
przez\
powłokę i ucieczka każdego\
wyrażenia regularnego ponownie. W rzeczywistości podwójne cudzysłowy nie są w tym przypadku konieczne, ponieważ każdy znak specjalny jest odpowiednio usuwany.sed "s/[\\]//g"
- Ucieczka w skorupie ukośnikiem odwrotnym\
i w wyrażeniu regularnym użyj zestawu[
]
.sed "s/[\]//g"
- Tak, twój przykład powinien działać w środowisku zgodnym z POSIX! Między podwójnymi cudzysłowami\
reprezentuje siebie, chyba że poprzedza znak specjalny w kontekście podwójnych cudzysłowów:$`"\
lub nowego wiersza. Wygląda na to, że w twoim przypadku albo powłoka albosed
nie jest zgodna ze standardem POSIX.W przypadku pojedynczych cudzysłowów możesz również użyć łańcucha w taki sam sposób, w jaki go użyłeś lub w skrócie:
sed 's/[\]//g'
sed 's/\\//g'
źródło
Musisz uciec przed ukośnikiem. Spróbuj tego:
źródło
Jeśli nie chcesz rozwiązań sed, spróbuj wykonać następujące polecenia:
źródło
W awk, chciałbym to zrobić,
źródło
Umieść
\
wcześniej,\
jak to robisz z większością postaci specjalnych.źródło
g
flagę z nieznanego powodu. Zmienia to zachowanie polecenia, ale taka zmiana nie była wymagana w pytaniu. W przeciwnym razie twoja odpowiedź nie przyniesie nic nowego w porównaniu do wcześniejszych odpowiedzi.