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