需要使用awk匹配在文件中查找字符串

时间:2014-11-11 05:52:38

标签: regex bash awk

我有javascript文件,其中包含以下

    ..............
    templateUrl: 'views/product.html'
    url: '/categories',
    templateUrl: 'views/categories.html'
    url: '/report',
    templateUrl: 'views/report.html'
    url: '/publisher',
    templateUrl: 'views/publisher.html'
    url: '/manageoutlet',
    templateUrl: 'views/outlet.html'
    url: '/order',
    templateUrl: 'views/order.html'
    url: '/mobileapp',
    templateUrl: 'views/mobileapp.html'
    url: '/cartitem/:id',
    .....
    .....
    'url': 'http://fhdjhjd/fkdf',
    ........
    ........

我需要使用'url': 'http://fhdjhjd/fkdf',从文件中获取行awk,因为使用以下代码

sudo awk '{
    if(match($0,/'url'\s*:\s*'.*'/)){
        pattern = substr($0,RSTART,RLENGTH);
        printf "%s\n",pattern;
    }
}' "app.js"

但输出是

url: '/categories',
url: '/report',
url: '/publisher',
url: '/manageoutlet',
url: '/order',
url: '/mobileapp',
url: '/cartitem/:id',

我不知道为什么会这样。我需要得到这条线

'url': 'http://fhdjhjd/fkdf',

4 个答案:

答案 0 :(得分:2)

使用\ 047匹配"'"

sudo awk '{
    if(match($0,/\047url\047\s*:\s*'.*'/)){
        pattern = substr($0,RSTART,RLENGTH);
        printf "%s\n",pattern;
    }
}' "app.js"

答案 1 :(得分:1)

awk -F":" '$2~/fhdjhjd/{ print }' file

答案 2 :(得分:1)

试试这个:

awk '($0~/'\''url'\'':/) {print}' File

在您的情况下,它将是:

sudo awk '($0~/'\''url'\'':/) {print}' "app.js"

答案 3 :(得分:1)

您应该使用'

转义单引号'\''

正则表达式必须

'\''url'\''\s*:\s*'.*'

代码可以是

sudo awk '{
    if(match($0,/'\''url'\''\s*:\s*'.*'/)){
        pattern = substr($0,RSTART,RLENGTH);
        printf "%s\n",pattern;
    }
}' "app.js"

但我会使用更简单的awk代码

$ awk ' /'\''url'\''\s*:\s*'.*'/ ' "app.js"
    'url': 'http://fhdjhjd/fkdf',