从文件中的文本创建文件

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