文件="值"
这是价值的内容:
第一个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}," !! ??
到目前为止我所知道的:
^ - >行开始
$ - >行尾
^ $ - > ?
{} - >完全匹配
, - > ?
所有这些符号在一起 - > ?
有什么想法吗?非常感谢你。
答案 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模式