如何grep并只获取匹配的字符串?

sys*_*end 6 linux bash grep

随意更改标题,因为它与我的问题 100% 不匹配

我在一个文件中有这样的东西:

junk
long_ass_string "/I/want/this/$code/$name" long_ass_string
junk
Run Code Online (Sandbox Code Playgroud)

举例说明:

  • /我/想/本/部分始终是相同的
  • $code$name是动态的,每个字符串都不同
  • long_ass_string中可以有更多的/I/want/this/$code/$name字符串,我想获得所有这些字符串。
  • 引号 (this => " ) 出现在每个/I/want/this/$code/$name字符串中。

到目前为止,我已经尝试...

grep -w "/I/want/this/*" file# 输出 long_ass_string
grep -o "/I/want/this/*" file# 输出 /I/want/this/

想避免使用仅在之前和/或之后获得 x 个额外字符的解决方案

Tho*_*hor 5

我会用 grep 来处理所有字符串,然后用第二个 grep 对其进行排序,例如:

grep -o '"[^"]*"' file
Run Code Online (Sandbox Code Playgroud)

输出:

"/I/want/this/$code/$name"
Run Code Online (Sandbox Code Playgroud)

评论您对正则表达式的使用

此表达式/I/want/this/*匹配/I/want/this零个或多个斜杠字符,您可能的意思是:/I/want/this/.*匹配/I/want/this/零个或多个字符。


kcd*_*dtv 0

如果我很理解你,你想摆脱每行中的第一个 $code 和 $name 变量。您可以通过管道将您的结果进行剪切。按照你的例子:

grep "/I/want/this/" myfile.txt | cut -d '/' -f 1-4,7-
Run Code Online (Sandbox Code Playgroud)

您定义分隔符(例如-d符号)并指示要抓取的字段。 在这种情况下,从分隔符 1 到 4 ( ) 以及第七个分隔符之后的所有字段(通过参数完成),这样您就可以删除与定义的正则表达式匹配的所有行中第四个和第七个分隔符之间的字段。/-f
/I/want/this/7-/$code/$name

echo "/I/want/this/NOT/THAT/and/everythingelse" | grep "/I/want/this/" | cut -d '/' -f 1-4,7- 
/I/want/this/and/everythingelse
Run Code Online (Sandbox Code Playgroud)