sed는 줄에서 특수 문자와 공백을 제거합니다.

sed는 줄에서 특수 문자와 공백을 제거합니다.

입력

[*] 111, 22, 33, 44

산출

111,22,33,44

sed명령을 사용하면 아직 공간이 있음을 의미하는 sed 's/^\[\*\][[:space:]]*//' file출력을 표시할 수 있었습니다 111, 22, 33, 44.

그렇다면 올바른 sed명령은 무엇입니까?

답변1

짧은 대답은 이것이 원하는 것을 수행해야 한다는 것입니다.

sed 's/[][*]\|[[:space:]]//g'

다음과 같이 테스트해 보세요.

echo '[*] 111, 22, 33, 44' | sed 's/[][*]\|[[:space:]]//g'

산출:

111,22,33,44

더 긴 설명이 이어집니다.


당신의 표현에서 누락된 핵심 요소는명령g전역 대체를 수행합니다. 이 명령이 없으면 각 줄의 첫 번째 일치 항목만 대체됩니다.

내 솔루션 중 가장 직관적이지 않은 부분은 문자 클래스 내에 대괄호를 포함하는 방법입니다. 이를 위해 우리는sed 매뉴얼:

‘]’
    ends the bracket expression if it’s not the first list item.
    So, if you want to make the ‘]’ character a list item, you must put it first.

해당 주제에 대한 자세한 내용은 SeverFault에 대한 다음 게시물을 참조하세요.

또는 표현식을 가져와서 다른 sed명령으로 파이프할 수도 있습니다. 예:

echo '[*] 111, 22, 33, 44' \
| sed 's/^\[\*\]//' \
| sed 's/[[:space:]]//g'

관련 정보