Odpowiedzi:
Można zastąpić ukośnik odwrotny spacją, jak pokazano w przykładowym wyniku:
sed 's/\\/ /g'
lub możesz go usunąć, jak pokazano w kodzie:
sed 's/\\//g'
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, grepetc.) 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 albo sednie 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'
W awk, chciałbym to zrobić,
$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
sed 's/\\//'
Umieść \wcześniej, \jak to robisz z większością postaci specjalnych.
gflagę 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.
sed(a może uruchamiasz to polecenie z powłoki innej niż POSIX?). Nie trzebasedjednaktrwystarczy:tr -d '\\' < P.