2017-08-25 161 views
1

我想给grep(新手,正则表达式)用于下列任务的右侧的源代码树的字符串:如何grep为包含标点符号的字符串?

some_var = %1$s %2$s ID 

我曾尝试:

grep -ri '[[:punct:]]1[[:punct:]]s [[:punct:]]2[[:punct:]]s ID' . 

grep -ri "'[[:punct:]]1[[:punct:]]s'\|'[[:punct:]]2[[:punct:]]s ID'" . 

我ve跑:

grep -ri some_var . 

而这返回some_var,但无法找出如何返回赋值运算符的另一端。

我读过gnu grep字符类和括号表达式,但它仍然不清楚。

+0

有网上正则表达式的工具,你可以用它来使用手艺许多不同类型的正则表达式口味的通用解决方案。 – jdv

+1

您的第一个grep命令适用于我。你会澄清你的问题吗? – John1024

+0

@ John1024好吧,它不会中断,它好像是在寻找某些东西,但搜索结束后什么也没有返回。我知道字符串'%1 $ s%2 $ s ID'在几个文件中,所以我期待字符串被返回并且它在源码树中的位置。 –

回答

0

使用awk

awk -F'[[:space:]]*=[[:space:]]*' '$1 == "some_var" { print $2 }' 

sed

sed 's/^some_var[[:space:]]*=[[:space:]]*\(.*\)/\1/' 

如果你想使用grep你需要使用GNU的grep用Perl的正则表达式:

grep -oP '^some_var\s*=\s*\K.*' 

但正如我所说,这只适用于GNU grep,并不是标准的。

+0

首先,感谢您的回应和帮助。我需要改变和抱歉,因为我没有这么清楚。我只需要指定赋值运算符的右侧,即, %1 $ s%2 $ s ID。 –

+0

那么,只需使用'awk -F'=''$ 2 ==“%$ 1s%2 $ s ID”{print $ 2}'' – hek2mgl

0

要卸下左侧与GNU的sed:

$ sed 's/^some_var\s=\s*//' <<< "some_var = %1$s %2$s ID" 
%1 %2 ID 
相关问题