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
通过将字段(默认情况下由空格分隔(至少是空格和制表符,可能其他取决于语言环境和 awk 实现))与OFS
(默认情况下为空格)来重建记录。等价
sed
的:[[:space:]]
其中[[:blank:]]
至少包括空格和制表符;[[:space:]]
还包括垂直间距字符 1,如果文件具有 MSDOS CRLF 行结尾,这在这里可能很有用,因为它会删除行末尾的那些虚假 CR。1 例如垂直制表符、换页符等不应出现在输入中的内容、换行符、行分隔符等不会出现在记录
awk
处理中的内容,因为依次awk
处理每一行的内容使用 sed 应该可以简单地做到这一点:
s/pattern/replacement/
进行查找和替换,^
意味着行的开头,*
任意数量的空格,并且*
只是一个空格后跟任意数量的空格。最后g
的代表“全局”,即替换所有匹配项。[[:space:]]
如果那里还有选项卡,请将空格替换为:如果你可以使用 Perl:
如果您想从命令行尝试单行版本:
perl -nE '{$_ =~ s/\s+/ /g; $_ =~s/^\s//; say $_}' file.txt
grep include /etc/nginx/nginx.conf | sed -e 's/^[[:space:]]*include[[:space:]]*//; s/[[:space:]]*;//'