sed 공백 제거

sed 공백 제거

나는 sed종종 공백 패턴 일치에 실패한다는 것을 알았습니다. 다음 예를 고려하십시오.

echo 'A     B     C' | sed 's/[ \t]*//g'
ABC

echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
A       B       C

perl -e 'print "A     B     C\n"' | sed 's/[ \t]*//g'
ABC

perl -e 'print "A\tB\tC\n"' | sed 's/[ \t]*//g'
A       B       C

sed누군가 공백과 일치하지 않는 이유를 설명해 주시겠습니까 ?

답변1

1.

echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
A       B       C

나에게 효과적

$ echo -e 'A\tB\tC' | sed 's/[ \t]*//g'
ABC

이 시도

$ echo -e 'a\tb' | sed -e 's/[ \t]//'
ab

2.

perl -e 'print "A     B     C\n"' | sed 's/^[ \t]*//g'
A       B       C

^문자열 의 줄 시작 부분( ) 에 공백이 포함되어 있지 않습니다.

답변2

의 일부 버전은 대체 명령의 왼쪽에서 sed지원되지 않으며 일부 다른 이스케이프는 지원되지 않습니다.\t

sed버전별 변형에 대한 정보는 다음에서 찾을 수 있습니다.자주하는 질문.

답변3

위에 있는 두 번째 설명은 내 컴퓨터(Ubuntu 10.10 amd64, sed 버전 4.2.1, sed 패키지 버전 4.2.1-7)에서 작동하는데 왜 작동하지 않는지에 대한 설명이 없습니다.

세 번째와 네 번째는 줄 시작 앵커(^)를 사용하기 때문입니다.오직선행 공백을 제거하고 입력 텍스트에서 줄 시작 부분에 공백이 없습니다.

답변4

당신은 사용해야합니다\에스공백과 탭을 모두 일치시키려면 다음을 수행하십시오.

echo 'A     B     C' | sed 's/\s//g'
ABC

echo -e 'A\tB\tC' | sed 's/\s//g'
ABC

perl -e 'print "A     B     C\n"' | sed 's/\s//g'
ABC

perl -e 'print "A\tB\tC\n"' | sed 's/\s//g'
ABC

관련 정보