无法在bash中拆分文本字符串

时间:2017-08-08 18:26:56

标签: bash awk

我想在变量中存储我的scala编译器的当前版本。要查找scala编译器版本,我可以运行命令scalac -version以获得以下输出:

$> scalac -version
Scala compiler version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

我知道以下命令会在空格分隔的字符串中找到第四个字:

> N=4; echo "Scala compiler version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL" | grep "Scala compiler" | awk -v N=$N '{print $N}'
2.11.6

但是,如果不是使用硬编码字符串而是使用scalac -version作为echo命令的输入,则结果字符串不会被拆分:

> N=4; echo "$(scalac -version)" | grep "Scala compiler" | awk -v N=$N '{print $N}'
Scala compiler version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

如何从第三个代码段获取第二个代码段的结果?

谢谢

2 个答案:

答案 0 :(得分:1)

使用GNU grep:

var table = $('#table1').DataTable({
            "serverSide": true, //include the serverSide configuration
            "ajax" : {
                url: "yourServletName",
                contentType: "application/json",
                dataType: "json"
             },
            "columns" : [ { //instead of columnDefs, try to use columns
                    {
                         "data" : "ID"
                    }, {
                         "data" : "NAME"
                    }, {
                         "data" : "SURNAME"
                    }, {
                         "data" : "PHONE"
                    }, {
                         "data" : "U_TYPE_NAME",
                          searchable : false
                    }, {
                          "data" : "MAIL"
                    }, {
                          "targets": [6],
                          "data" : null,
                          "defaultContent" : "<button>Click!</button>"
                       }
                   }]
            });

或awk:

scalac -version | grep -Po '(?<=version ).*?(?= )'

输出:

2.11.6

答案 1 :(得分:1)

cut

scalac -version 2>&1|cut -d' ' -f4

喜欢@David C. Rankin说scalac -version输出stderr,所以2>&1stderr重定向到stdout