Shell : 分解并保存文件
Shell : Explode and Save file
我需要一些帮助。
site.txt
[site1]
server{
root test;
server_name test.com;
}
END
[site2]
server{
root game;
server_name game.com;
}
END
这是我使用的命令
sudo awk -v RS='END\n' 'NF{f=; gsub(/[][]/, "", f); printf "%s", [=12=] > (f ".txt")}' site.txt
输出显示
site1.txt
[site1]
server{
root test;
server_name test.com;
}
site2.txt
[site2]
server{
root game;
server_name game.com;
}
my objective 是从输出中删除 [site1] 和 [site2] 。
您需要允许 END
前后的空格作为分隔符以删除新行,并且还需要调用 sub
函数以丢弃输出中的第一行。你可以使用这个命令
awk -v RS='[[:space:]]*END[[:space:]]+' 'NF {
f = ;
gsub(/[][]/, "", f)
sub(/^[[:space:]]*\[[^]]*\][[:space:]]+/, "")
print > (f ".txt")
}' site.txt
输出:
cat site.txt
server{
root test;
server_name test.com;
}
cat site2.txt
server{
root game;
server_name game.com;
}
详情:
-v RS='[[:space:]]*END[[:space:]]+'
:将输入记录分隔符设置为 END
前后有空格
NF{...}
: 只对非空行执行
f=
: 保存 </code> 即 <code>[...]
行到变量 f
gsub(/[][]/, "", f)
:从变量 f
中删除 [
和 ]
sub(/^[[:space:]]*\[[^]]*\][[:space:]]+/, "")
: 从每个块中删除第一行
print > (f ".txt")
:将单个记录重定向到文件名,文件名的值为 f
,后跟扩展名 ".txt"
.
我需要一些帮助。
site.txt
[site1]
server{
root test;
server_name test.com;
}
END
[site2]
server{
root game;
server_name game.com;
}
END
这是我使用的命令
sudo awk -v RS='END\n' 'NF{f=; gsub(/[][]/, "", f); printf "%s", [=12=] > (f ".txt")}' site.txt
输出显示
site1.txt
[site1]
server{
root test;
server_name test.com;
}
site2.txt
[site2]
server{
root game;
server_name game.com;
}
my objective 是从输出中删除 [site1] 和 [site2] 。
您需要允许 END
前后的空格作为分隔符以删除新行,并且还需要调用 sub
函数以丢弃输出中的第一行。你可以使用这个命令
awk -v RS='[[:space:]]*END[[:space:]]+' 'NF {
f = ;
gsub(/[][]/, "", f)
sub(/^[[:space:]]*\[[^]]*\][[:space:]]+/, "")
print > (f ".txt")
}' site.txt
输出:
cat site.txt
server{
root test;
server_name test.com;
}
cat site2.txt
server{
root game;
server_name game.com;
}
详情:
-v RS='[[:space:]]*END[[:space:]]+'
:将输入记录分隔符设置为END
前后有空格NF{...}
: 只对非空行执行f=
: 保存</code> 即 <code>[...]
行到变量f
gsub(/[][]/, "", f)
:从变量f
中删除 sub(/^[[:space:]]*\[[^]]*\][[:space:]]+/, "")
: 从每个块中删除第一行print > (f ".txt")
:将单个记录重定向到文件名,文件名的值为f
,后跟扩展名".txt"
.
[
和 ]