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'

관련 정보