![读取文件并将每一行用制表符和空格附加到另一个文件中](https://linux22.com/image/742402/%E8%AF%BB%E5%8F%96%E6%96%87%E4%BB%B6%E5%B9%B6%E5%B0%86%E6%AF%8F%E4%B8%80%E8%A1%8C%E7%94%A8%E5%88%B6%E8%A1%A8%E7%AC%A6%E5%92%8C%E7%A9%BA%E6%A0%BC%E9%99%84%E5%8A%A0%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD.png)
我有以下代码:
#!/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