
나는 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