sed를 사용하여 문자 <> 제거


18

다음과 같이 줄이있는 파일이 있습니다.

...
... <230948203[234]>, ...
... <234[24]>, ...
..

나는 문자를 제거하기 위해 sed를 사용하고자 < ,>모든 라인에서

사용하려고 sed 's/<>,//g'했지만 작동하지 않았습니다 (아무것도 변경하지 않았습니다). 이 특수 문자를 피해야합니까? 단일 sed명령을 사용하여 여러 문자를 삭제할 수 있습니까?


2
bash-3.2$ echo "<230948203[234]>," | tr '<>,' ' '-> 230948203 [234]EDITED Thanks to Paul

3
@ srikanthradix : 문자를 제거하지 않고 공백으로 바꿉니다. 당신은 tr -d '<>,' ''(Chris Down의 답변 에서처럼) 원합니다 .
Keith Thompson

1
@KeithThompson : tr -d '<>,'``이 없으면 끝이 없습니까?
사용자가 알 수 없음

@userunknown : 예, 수정 해 주셔서 감사합니다.
Keith Thompson

답변:


43

sed:

sed 's|[<>,]||g'

tr:

tr -d '<>,'

2
맞습니다.하지만 개인적 |으로 구분 기호로 사용하는 것이 약간 혼란 스럽습니다. sed 's/[<>]//g'조금 더 읽기 쉽습니다.
Keith Thompson

@KeithThompson 실용적으로 사용합니다. 리터럴을 다루는 |것보다 리터럴을 다루는 것 (그리고 따라서 탈출해야 함)이 훨씬 적습니다 /.
Chris Down

2
정당한 포인트. 반면에, |종종 일부 정규 표현식 구문 에서 대체에 사용되는 메타 문자이기도 합니다 ( sed특히 필요 \|). 개인적으로 리터럴 /문자 를 처리해야 할 경우 일반적으로 ,구분 기호로 사용 합니다.
Keith Thompson

1
위에서 언급 한 개인 / 특정 상황 외에도 비표준 구분 기호를 사용할 때 고유 구문 차이가 있습니다. 첫 번째 비 / 구분 기호는 sed 범위 표현식 에 대해 이스케이프되어야합니다 . 예 :printf 'a\nb\nc\n' | sed -n '\|a|,\|b|p'
Peter.O

8

이걸로 해봐: sed 's/[<>,]//g'


거기에 수직 막대는 무엇입니까?
Paul Tomblin

sed 's / [<|> |] / / g'-s가 검색을 수행합니다. /는 구분 기호입니다. [] 괄호를 사용하면 둘 이상의 것을 검색 할 수 있습니다. | 세로 막대는 논리적이거나 g는 전체 또는 전체 파일을 검색하는 것입니다.
Iman 2019

3
|안에는 필요하지 않습니다 (또는 실제로 원합니다) []. 사용하십시오 's/[<>,]//g'.
케빈

2
세로 막대가 필요하지 않습니다. 대괄호 안의 모든 항목이 목록으로 검색됩니다. sed 's/[<>,]/ /g'아이디어가 세로 막대를 제거한다는 점을 제외하고는 정확하게 작동했습니다.
Paul Tomblin

덧붙여서, 아마도 당신은 정규 표현식을보고 싶을 것입니다. 이것은 가장 쉬운 예 중 하나이지만 이미 힘을 보여줍니다.
Bernhard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.