请随意更改标题,因为它与我的问题不完全匹配
我在一个文件中有类似这样的内容:
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