문자열에서 선행 공백을 제거합니다.

문자열에서 선행 공백을 제거합니다.

출력의 각 줄에서 모든 선행 및 후행 공백과 탭을 제거하고 싶습니다.

trim출력을 파이프로 연결할 수 있는 간단한 도구가 있나요?

예시 파일:

test space at back 
 test space at front
TAB at end  
    TAB at front
sequence of some    space in the middle
some empty lines with differing TABS and spaces:





 test space at both ends 

답변1

awk '{$1=$1;print}'

또는 더 짧게:

awk '{$1=$1};1'

선행 및 후행 공백이나 탭을 잘라냅니다 . 1 그리고일련의 탭과 공백을 하나의 공백으로 압축합니다.

이것은 누군가에게 무언가를 할당할 때 작동합니다. 대지$0그런 다음 모든 필드( ,..., )를 ( 기본적으로 공백)로 연결하여 재구성해야 하는 전체 레코드( , 기본적으로 인쇄되는 내용)에 액세스하려고 합니다 .printawk$1$NFOFS

빈 행도 제거하려면 이를 다음과 같이 변경하십시오 awk 'NF{$1=$1;print}'( NF조건으로 필드 N수가 0이 아닌 레코드를 선택함 F). 하다아니요때때로 권장되는 것처럼 awk '$1=$1'이렇게 하면 첫 번째 필드가 ( , , ...) 0에서 지원하는 표현인 행도 제거됩니다.awk000-0e+12


¹ 및 기타 공백 문자(로케일 및 awk구현 에 따라 다름)

답변2

GNU를 사용하는 경우 명령은 다음과 같이 압축될 수 있습니다 sed.

$ sed 's/^[ \t]*//;s/[ \t]*$//' < file

이것이 위의 명령이 실제로 수행하는 작업입니다.

$ echo -e " \t   blahblah  \t  " | sed 's/^[ \t]*//;s/[ \t]*$//'
blahblah

이를 사용하여 명령이 필요한 문자를 올바르게 제거하는지 hexdump확인할 수 있습니다.sed

$ echo -e " \t   blahblah  \t  " | sed 's/^[ \t]*//;s/[ \t]*$//' | hexdump -C
00000000  62 6c 61 68 62 6c 61 68  0a                       |blahblah.|
00000009

캐릭터 클래스

다음과 같이 컬렉션을 그대로 나열하는 대신 문자 클래스 이름을 사용할 수도 있습니다 [ \t].

$ sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//' < file

$ echo -e " \t   blahblah  \t  " | sed 's/^[[:blank:]]*//;s/[[:blank:]]*$//'

정규식(regex)을 사용하는 대부분의 GNU 도구는 이러한 클래스를 지원합니다(ASCII 기반 시스템의 일반적인 C 로케일에서 여기(그리고 저기에만)에 해당).

 [[:alnum:]]  - [A-Za-z0-9]     Alphanumeric characters
 [[:alpha:]]  - [A-Za-z]        Alphabetic characters
 [[:blank:]]  - [ \t]           Space or tab characters only
 [[:cntrl:]]  - [\x00-\x1F\x7F] Control characters
 [[:digit:]]  - [0-9]           Numeric characters
 [[:graph:]]  - [!-~]           Printable and visible characters
 [[:lower:]]  - [a-z]           Lower-case alphabetic characters
 [[:print:]]  - [ -~]           Printable (non-Control) characters
 [[:punct:]]  - [!-/:-@[-`{-~]  Punctuation characters
 [[:space:]]  - [ \t\v\f\n\r]   All whitespace chars
 [[:upper:]]  - [A-Z]           Upper-case alphabetic characters
 [[:xdigit:]] - [0-9a-fA-F]     Hexadecimal digit characters

리터럴 세트 대신 이를 사용하는 것은 항상 공간 낭비처럼 보이지만, 코드 이식성이 걱정되거나 대체 문자 세트(국제화된 문자 세트를 생각해 보세요)를 처리해야 하는 경우 대신 클래스 이름을 사용할 수 있습니다.

인용하다

답변3

매개변수가 없는 xargs가 이를 수행할 수 있습니다.

예:

trimmed_string=$(echo "no_trimmed_string" | xargs) 

답변4

행을 변수로 저장하면 bash를 사용하여 작업을 수행할 수 있습니다.

문자열에서 선행 공백을 제거합니다.

shopt -s extglob
printf '%s\n' "${text##+([[:space:]])}"

문자열에서 후행 공백을 제거합니다.

shopt -s extglob
printf '%s\n' "${text%%+([[:space:]])}"

문자열에서 모든 공백을 제거합니다.

printf '%s\n' "${text//[[:space:]]}"

관련 정보