我尝试使用基于文件中文本的创建文件。以下是文件片段:
//logging {
// channel default_debug {
// file "data/named.run";
// severity dynamic;
// };
//};
logging {
channel default_file {
file "/var/log/named/default.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
需要创建大约15个文件,虽然手动操作并不是非常繁琐,但我想了解如何编写此任务的脚本。 我首先试图通过使用awk输出到/var/log/named/general.log的第四个字段的新文件来解决问题。 我正在尝试的代码:
awk -F"/" '{print $4}' named.conf > test.conf
但是,这似乎不会输出所需的文字。如果我只是复制并粘贴:
channel default_file {
file "/var/log/named/default.log" versions 3 size 5m;
severity dynamic;
print-time yes;
};
然后运行
awk -F"/" '{print $5}' named1.conf
我收到此输出
default.log" versions 3 size 5m;
我想创建名为" default.log"的文件。来自档案" /var/log/named/default.log"
任何帮助都将不胜感激。
答案 0 :(得分:1)
如果您想要的是字符串default.log
,而没有其余部分,则可以更改字段分隔符:
awk -F'[/"]+' 'NF>1{print $5}' named.conf
条件NF>1
可防止文件中的其余行导致空白输出。
答案 1 :(得分:1)
awk '
# skip comments
/^[[:blank:]]*\/\// {next}
# look for files
$1 == "file" {
gsub(/^"|"$/, "", $2) # remove leading and trailing quotes
print $2
n = split($2, a, "/") # find the basename of the file
print a[n]
}
' named.conf
根据您的样本输入,将打印:
/var/log/named/default.log
default.log
等效的sed
sed -n '
/^[[:blank:]]*file "/ {
s/// # delete what was just matched
s/".*// # delete the quote and the following text
p
s!.*/!! # delete the path part
p
}
' named.conf