从文件中的文本创建文件

时间:2015-03-24 18:37:30

标签: bash awk sed

我尝试使用基于文件中文本的创建文件。以下是文件片段:

//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"

任何帮助都将不胜感激。

2 个答案:

答案 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