출력의 각 줄에서 모든 선행 및 후행 공백과 탭을 제거하고 싶습니다.
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
그런 다음 모든 필드( ,..., )를 ( 기본적으로 공백)로 연결하여 재구성해야 하는 전체 레코드( , 기본적으로 인쇄되는 내용)에 액세스하려고 합니다 .print
awk
$1
$NF
OFS
빈 행도 제거하려면 이를 다음과 같이 변경하십시오 awk 'NF{$1=$1;print}'
( NF
조건으로 필드 N
수가 0이 아닌 레코드를 선택함 F
). 하다아니요때때로 권장되는 것처럼 이렇게 하면 첫 번째 필드가 ( , , ...) awk '$1=$1'
0
에서 지원하는 표현인 행도 제거됩니다.awk
0
00
-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:]]}"