我无法理解这个grep模式

时间:2016-12-09 18:45:53

标签: bash grep

  

文件="值"

这是价值的内容:

第一个col1 col2 col3

第二个col1 col2 col3

三col1 col2 col3

想要输出:

第一个col1 col2 col3

三col1 col2 col3

条件:我们使用变量而不是直接使用文件。搜索模式也应存储在变量中。

为了得到这个结果,我做了:

  

VAR =第二

     

grep -v $ var $ file> $ tmp; mv $ tmp $ file

必须使用任何值初始化

tmp才能工作

但是我遇到了这个,我只是不理解我的bash:

  

grep -v" ^ $ {var}," $ file> $ tmp; mv $ temp $ file

除了它对我不起作用之外,我想了解其含义或至少是什么意思;也许我可以安排它。

什么意思" ^ $ {var}," !! ??

到目前为止我所知道的:

^ - >行开始

$ - >行尾

^ $ - > ?

{} - >完全匹配

, - > ?

所有这些符号在一起 - > ?

有什么想法吗?非常感谢你。

2 个答案:

答案 0 :(得分:2)

您的命令使用双引号,这意味着bash首先使用参数。

以下内容:

grep −v "^${var}," $file > $tmp;mv $temp $file

...与:

var=foo

... bash会将${var}扩展为foo,从而产生:

grep −v "^foo," $file > $tmp;mv $temp $file

(它还会展开$file$tmp$temp(?),但这并不有趣)

答案 1 :(得分:0)

添加罗杰的回答

在字符串中的{}之间定义变量表示bash哪个部分是字符串,哪个部分是变量。

例如,如果你这样写:

"^$var,"

bash会以这种方式扩展它:" ^'名为var的变量的值,'"这将导致一个空白值,因为变量是var而不是var,给出了这个最终结果:" ^"

如果您使用大括号,请改为:

"^${var},"

bash会查找变量var并在开头追加^和a,在扩展后给你这个值" ^' var value',"

所以

var=foo

你会得到" ^ foo,"作为你的grep模式