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


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.