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

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

请随意更改标题,因为它与我的问题不完全匹配

我在一个文件中有类似这样的内容:

junk
long_string "/I/want/this/$code/$name" long_string
junk

澄清例子:

  • /我要这个/部分始终相同
  • $代码$名称是动态的并且对于每个字符串都是不同的
  • 里面长字符串还可以有更多/我/想要/这个/$code/$name字符串,我想获得所有这些字符串。
  • 引号(this =>)存在于每一个/我/想要/这个/$code/$name细绳。

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

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

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

答案1

我会先 grep 所有字符串,然后再用第二个 grep 进行排序,例如:

grep -o '"[^"]*"' file

输出:

"/I/want/this/$code/$name"

评论一下你对正则表达式的使用

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

答案2

如果我理解正确的话,您希望删除每行中的第一个 $code 和 $name 变量。您可以将结果通过管道传输到 cut 来实现这一点。按照您的示例:

grep "/I/want/this/" myfile.txt | cut -d '/' -f 1-4,7-

使用定义分隔符(例如-d符号),使用 指示要抓取的字段。 在本例中,从分隔符 1 到 4()以及第七个分隔符之后的所有字段(使用参数 完成)这样,您就可以在所有与定义的正则表达式匹配的行中取出第 4 个和第 7 个分隔符之间的字段。/-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

相关内容