从文件中的文本创建文件
Create files from text in a file
我尝试使用基于文件中的文本创建文件。以下是文件片段:
//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 }' 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 }' named1.conf
我收到这个输出
default.log" versions 3 size 5m;
我想从文件“/var/log/named/default.log”创建名为 "default.log" 的文件
如有任何帮助,我们将不胜感激。
如果您想要的是字符串 default.log
,没有该行的其余部分,您可以更改您的字段分隔符:
awk -F'[/"]+' 'NF>1{print }' named.conf
条件 NF>1
防止文件中的其余行导致空白输出。
awk '
# skip comments
/^[[:blank:]]*\/\// {next}
# look for files
== "file" {
gsub(/^"|"$/, "", ) # remove leading and trailing quotes
print
n = split(, 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
我尝试使用基于文件中的文本创建文件。以下是文件片段:
//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 }' 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 }' named1.conf
我收到这个输出
default.log" versions 3 size 5m;
我想从文件“/var/log/named/default.log”创建名为 "default.log" 的文件
如有任何帮助,我们将不胜感激。
如果您想要的是字符串 default.log
,没有该行的其余部分,您可以更改您的字段分隔符:
awk -F'[/"]+' 'NF>1{print }' named.conf
条件 NF>1
防止文件中的其余行导致空白输出。
awk '
# skip comments
/^[[:blank:]]*\/\// {next}
# look for files
== "file" {
gsub(/^"|"$/, "", ) # remove leading and trailing quotes
print
n = split(, 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