텍스트 파일에서 백 슬래시 제거


10

나는 가지고있다

입력:

 NISHA =\455  

산출:

 NISHA = 455

\출력 에서 제거하고 싶습니다 . 명령을 사용하려고했지만 sed "s/[\]//g" P작동하지 않고 오류를 표시합니다.

character found after backslash is not meaningful

3
POSIX 이외의 구현을 가지고있는 것 같습니다 sed(또는 POSIX가 아닌 쉘에서 해당 명령을 실행하고 있습니까?). 당신은 필요하지 않습니다 sed,하지만 tr충분하다 : tr -d '\\' < P.
Stéphane Chazelas

답변:


20

예제 결과에 표시된대로 백 슬래시를 공백으로 바꿀 수 있습니다.

sed 's/\\/ /g'

또는 코드에 표시된대로 제거 할 수 있습니다.

sed 's/\\//g'

특수 문자

특별한 의미를 취소하기 위해 백 슬래시를 이스케이프 처리하는 데 문제가있을 수 있습니다. 백 슬래시는 쉘과 정규 표현식 모두에서 이스케이프하는 데 사용되는 특수 문자입니다.

쉘의 명령 행이나 스크립트에 입력 한 명령은 문자의 특수 의미와 이스케이프를 해석하는 쉘에 의해 먼저 처리됩니다. 그런 다음 결과는 명령에 전달되어 (예 sed:) 자체 문자 해석을 수행합니다. 명령을 구성 할 때 정신 절차는 반대 방법입니다. 먼저 정규 표현식에 이스케이프를 추가 한 다음 쉘에 이스케이프를 추가하십시오.

  1. 정규식에서 (같은 명령에 입력 sed, grep등) 백 슬래시는이 같은 백 슬래시로 이스케이프 할 수 있습니다 \\또한 당신은 집합 식을 사용할 수 [\]있습니다 백 슬래시가 특별한 의미를 잃는다 때문에 예전처럼.

  2. (예 bash:)에서는 백 슬래시로 백 슬래시를 이스케이프 처리 할 수 ​​있습니다. 따라서 \write 대신에 \\. 큰 따옴표 사이에 문자열을 묶으면 "백 슬래시 동작이 더 복잡해 지지만 <1> 이중 백 슬래시는 여전히 단일 백 슬래시를 생성합니다. 작은 따옴표 사이에 문자열을 묶으면 '을 제외한 모든 문자가 문자 그대로 처리 '됩니다.

당신이 사용하려는 경우 따옴표 : 다음 중 하나를 사용할 수 있습니다
sed "s/\\\\//g"탈출 - \에 의해 \쉘에서, 모든 탈출 \다시 정규식에 있습니다. 실제로 모든 특수 문자가 올바르게 이스케이프되므로이 경우 큰 따옴표가 필요하지 않습니다.
sed "s/[\\]//g"-백 슬래시로 쉘에서 탈출 \하고 정규 표현식에서 세트를 사용하십시오 [ ].
sed "s/[\]//g"예, POSIX 호환 환경에서 작동해야합니다. 큰 따옴표 사이 \의 특수 문자 앞에 나오는 큰 따옴표 $`"\또는 개행 문자를 제외하고는 큰 따옴표 사이에 표시됩니다 . 귀하의 경우 쉘이나 sedPOSIX 표준을 따르지 않는 것처럼 보입니다 .

함께 작은 따옴표 당신은 또한 당신이 사용 된 문자열이나 짧은 방법을 사용할 수 있습니다 :
sed 's/[\]//g'
sed 's/\\//g'


6

백 슬래시를 피해야합니다. 이 시도:

sed 's/\\//g'

3

sed 솔루션을 원하지 않으면 다음 명령으로 시도하십시오.

$ echo "NISHA =\455"| awk -F'\' '{print $1 $2}'
$ echo "NISHA =\455"| tr '\\' ' '
$ echo "NISHA =\455"| tr -d '\\'
$ echo "NISHA =\455"| cut -c 1-7,9-11

2

awk에서 나는 이것을 좋아할 것이다.

$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455

1
sed 's/\\//'

대부분의 특수 문자를 사용 하는 것처럼 \앞에 배치하십시오 \.


g알 수없는 이유로 플래그를 생략했습니다 . 이것은 명령의 동작을 변경하지만 질문에서 그러한 변경을 요구하지 않았습니다. 그렇지 않으면 귀하의 회신은 이전 답변과 비교하여 새로운 것을 가져 오지 않습니다.
pabouk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.