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
します。awk
OFS
同等sed
:
sed -E '/include/!d; s/[[:space:]]+/ /g; s/^ //; s/ $//' < your-file
[[:space:]]
[[:blank:]]
これには、少なくともスペースとタブが含まれます。[[:space:]]
また、縦間隔文字1も含まれます。これは、ファイルにMSDOS CRLF行末がある場合、行末の偽のCRを削除するため、ここで役に立ちます。
awk
1例:垂直タブ、フォームフィード(入力には表示されない)、改行、行区切り(ロギングプロセスには表示されません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/*;
コマンドラインで1行バージョンを試すには:
perl -nE '{$_ =~ s/[[:blank:]]+/ /g; $_ =~s/^\s//; print $_}' file.txt
答え4
grep include /etc/nginx/nginx.conf | awk -F ' ' '{print $2}' | sort | uniq