각 줄 시작 부분의 모든 공백을 탭으로 바꿉니다.

각 줄 시작 부분의 모든 공백을 탭으로 바꿉니다.

각 줄 시작 부분의 모든 공백을 탭으로 바꾸려면 어떻게 해야 합니까?

나는 이것을 위해 sed를 사용하는 것을 선호합니다.

답변1

휴대용.

TAB=$(printf '\t')
sed "s/^  */$TAB/" < file.in > file.out

일부 쉘( 적어도 ksh93, zsh, 및 FreeBSD )은 bash다음 과 같은 내용이 확장되는 특수한 형식의 따옴표( ) 도 지원합니다.mkshsh$'...'\t

sed $'s/^  */\t/' < file.in > file.out

fish은 따옴표 바깥으로 확장합니다.

sed 's/^  */'\t/ < file.in > file.out

sedGNU와 같은 일부 구현은 그 자체로 TAB을 의미하는 것으로 sed인식합니다 \t . 따라서 이것들도 작동할 것입니다:

sed 's/^  */\t/' < file.in > file.out

이식 가능하게 는 큰따옴표 안에서 awk확장됩니다 . \t또한 확장 정규 표현식을 사용하므로 x+다음 대신 사용할 수 있습니다 xx*.

awk '{sub(/^ +/, "\t"); print}' < file.in > file.out

답변2

GNU/Linux를 사용하는 경우 sed -r확장 정규식을 활성화해야 합니다.

 echo "        lots of spaces    " | sed -r 's:^\s+:\t:'

여기서 선행 공백만 모두 단일 tab.

관련 정보