sed(all)와 선행 공백을 일치시키는 올바른 방법은 무엇입니까?

sed(all)와 선행 공백을 일치시키는 올바른 방법은 무엇입니까?

sed선행 공백을 (모두)와 일치시키는 방법은 무엇입니까 ? 나는 선행 탭에 대해 말하는 것이 아니라 선행 공백에 대해서만 이야기하고 있습니다.

Nano에서 수행한 간단한 테스트에 따르면 이것이 올바른 것 같습니다.

sed "s/^ //g"

이 접근 방식에 문제가 있습니까?


참고: "모두"는 2개 이상(1개가 아님)이 있는 경우 문서의 모든 선행 공백을 나타냅니다.

답변1

선행 공백을 제거합니다.sed "s/^ *//"

선행 공백을 제거합니다.sed "s/^[[:space:]]*//"

선행 공백 및 탭 제거: ( sed "s/^[ \t]*//"GNU sed에서 작동) 또는
sed 's/^[[:blank:]]*//'(모든 것과 작동 sed) 또는 sed $'s/^[ \t]*//'(ksh/Bash/etc에서 리터럴 탭을 제공합니다. sed)

주석에서 언급했듯이, /g줄의 시작은 줄에서 한 번만 발생하고 /g패턴은 여러 번 재시도되지 않기 때문에 지정자는 아무 작업도 수행하지 않습니다. 대체를 반복하려면 조건 분기를 명시적으로 추가해야 합니다.sed -e :a -e 's/^ //' -e ta


^ *또한 빈 문자열(공백 없음)과 일치하지만 이는 중요하지 않습니다. 최소한 하나의 공백이 있는 행을 일치시키려면 확장 정규식에서 ^ *(이중 공백) 또는 을 사용하십시오. ^ +예를 들어 모든 들여쓰기를 정확히 두 개의 공백으로 변경하려면 sed -e 's/^ */ /'또는 sed -Ee 's/^ +/ /'( -E예: GNU 및 FreeBSD 지원)을 사용하세요.

답변2

아래 awk 명령을 사용하여 이 작업을 수행할 수도 있습니다.

 awk '{gsub("^ *","",$0);print $0}' filename

관련 정보