我有以下代码:
#!/bin/sh
file_name="webproxy.conf"
echo "#generated code" > $file_name
while read line
do
eval echo $line >> $file_name
done < "./template.txt"
模板.txt:
server {
listen 80;
location / {
proxy_set_header blabla ;
}
}
输出为webproxy.conf
:
server {
listen 80;
location / {
proxy_set_header blabla ;
}
}
我如何添加缺失的空格以美化结果文件
答案1
您可以使用此代码在最后格式化文件:
#!/usr/bin/awk -f
{sub(/^[ \t]+/,"");idx=0}
/\{/{ctx++;idx=1}
/\}/{ctx--}
{id="";for(i=idx;i<ctx;i++)id=sprintf("%s%s", id, "\t");printf "%s%s\n", id, $0}
演示:
#cat c
server {
listen 80;
location / {
proxy_set_header blabla ;
}
}
# cat c | ./ngainx_fmt
server {
listen 80;
location / {
proxy_set_header blabla ;
}
}
脚本ngainx_fmt
在哪里awk
答案2
awk
对于这样的任务来说它最容易使用。
$0 ~ /{/
搜索左括号并设置缩进。
$0 ~ /}/
搜索右括号并减少缩进。
{ print dent $0 }
打印该行,并以缩进作为前缀。
空格缩进版本
file_name="webproxy.conf"
echo "#generated code" > $file_name
awk 'BEGIN { dent="";nspaces=3}
{ print dent $0 }
$0 ~ /{/ {for (n=0; n<nspaces;n++) dent=dent" "}
$0 ~ /}/ {dent=substr(dent, 0, length(dent)-nspaces)}
' template.txt >> $file_name
Tab 缩进版本:
file_name="webproxy.conf"
echo "#generated code" > $file_name
awk 'BEGIN { dent=""}
{ print dent $0 }
$0 ~ /{/ {dent=dent"\t"}
$0 ~ /}/ {dent=substr(dent, 0, length(dent)-1)}
' template.txt >> $file_name