
입력
[*] 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'