2016-04-24 52 views
0

我有一个文件包括许多行
我想用grep行包含字符串使用一个变量,这个字符串就是一个URI,如:grep的行包含在文件中精确的字符串

/wp-admin/admin-ajax.php

我希望到grep只行包含详细的URI:

/wp-admin/admin-ajax.php

和不提取线路是这样的:

/wp-admin/admin-ajax.php?blahblah

示例文件:

4.2.2.4 sitename.com/wp-admin/admin-ajax.php 
4.2.2.4 sitename.com/wp-admin/admin-ajax.php? 
4.2.2.4 sitename.com/wp-admin/admin-ajax.php?blah 
4.2.2.4 sitename.com/wp-admin/admin-ajax.php?blahblah 

搜索主题:

sitename.com/wp-admin/admin-ajax.php 

应提取线路是这样的:

4.2.2.4 sitename.com/wp-admin/admin-ajax.php 

回答

1

添加-F选项grep来告诉它使用字符串,而不是正则表达式和-x马赫整行:

grep -x -F "$variable" 

参见手册页。

鉴于你的更新问题:

$ awk -v tgt='sitename.com/wp-admin/admin-ajax.php' '$NF==tgt' file 
4.2.2.4 sitename.com/wp-admin/admin-ajax.php 
+0

我不想匹配整行,搜索字符串是行的一部分,但我想提取整行 –

+0

而且搜索字符串应该是准确的,意思是'搜索'不应该提取'搜索' –

+1

我刚刚更新我给你的更新问题的答案。 –

0

如何:

awk 'NR==FNR{a[$0]; next} $1 in a' pattern.txt data_file.txt 

假设你保持你的数据在data_file.txt,如:

www.sitename.com/admin/index.php 
www.sitename.com/admin 
www.sitename.com/ 
... 

而且要在其他文件中标识的东西,例如pattern.txt像:

www.sitename.com/admin 
+0

我用你的代码作为一个管道: | awk'NR == FNR {a [$ 0];接下来} $'变量中的$ 1变量 没有工作 –

+0

噢,好的。然后更简单:'| awk -vvar = $ variable'$ 0 == var'' – TasosGlrs

+1

不在'-v'和'var ='之间留出一个空格可以让你的代码不必要地依赖gawk。只留一个空格:'awk -v var =“$ variable”'$ 0 == var'file'。并且记得当然总是引用你的shell变量。 –

相关问题