단어 사이의 여러 공백을 제거하는 방법은 무엇입니까?

단어 사이의 여러 공백을 제거하는 방법은 무엇입니까?
grep include /etc/nginx/nginx.conf

산출:

include /etc/nginx/modules-enabled/*.conf;
    include             mime.types;
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

원하는 출력:

include /etc/nginx/modules-enabled/*.conf;
include mime.types;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

답변1

awk '/include/ {$1 = $1; print}' < your-file

그렇게 할 것입니다.

(기본적으로 공백)을 사용하여 공백(기본적으로 공백)으로 구분된 항목(최소한 공백과 탭, 로케일 및 awk 구현에 따라 다른 항목)을 할당하여 레코드를 강제로 재구성 $1합니다 .awkOFS

동등한 sed:

sed -E '/include/!d; s/[[:space:]]+/ /g; s/^ //; s/ $//' < your-file

[[:space:]][[:blank:]]여기에는 최소한 공백과 탭이 포함됩니다. [[:space:]]또한 세로 간격 문자 1도 포함됩니다. 이는 파일에 MSDOS CRLF 줄 끝이 있는 경우 줄 끝에 있는 가짜 CR을 제거하므로 여기서 유용할 수 있습니다.


awk1 예: 수직 탭, 폼 피드(입력에 표시되지 않아야 함), 줄 바꿈, 줄 구분 기호(로깅 프로세스 에 표시되지 않음 awk)콘텐츠철사차례로

답변2

sed를 사용하면 이 작업을 수행하는 것이 간단합니다.

% sed -e 's/^ *//g' -e 's/  */ /g' file.txt
include /etc/nginx/modules-enabled/*.conf;
include mime.types;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

s/pattern/replacement/찾기 및 바꾸기를 수행한다는 ^것은 줄의 시작, *임의의 공백 수, *공백 뒤에 임의의 공백 수를 의미합니다. 마지막은 g모든 일치 항목을 대체하는 "전역"을 나타냅니다.

[[:space:]]여전히 탭이 있으면 공백을 다음으로 바꾸세요.

% sed -e 's/^[[:space:]]*//g' -e 's/[[:space:]][[:space:]]*/ /g' file.txt

답변3

Perl을 사용할 수 있는 경우:

#!/usr/bin/perl
use v5.30;
use warnings;

while (<DATA>){
    $_ =~ s/[[:blank:]]/ /g; #replace any number of subsequent space with single space except newline
    $_ =~ s/\s//; #remove single space at the beginning of each line
    print("$_");
}
__DATA__
include /etc/nginx/modules-enabled/*.conf;
    include             mime.types;
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

명령줄에서 한 줄 버전을 사용해 보려면 다음을 수행하세요.

perl -nE '{$_ =~ s/[[:blank:]]+/ /g; $_ =~s/^\s//; print $_}' file.txt

답변4

grep include /etc/nginx/nginx.conf | awk -F ' ' '{print $2}' | sort | uniq

관련 정보