将字符串添加到包含模式的行的开头

时间:2015-02-20 09:50:49

标签: regex bash awk sed vi

我正在尝试评论我的脚本中的行,其中存在来自给定模式列表的模式。现在,我可以在命令行上执行以下操作:

sed '/abcdefg/ s/^/#/' file.sql > file.commented

但是如果我使用变量作为模式(而不是像上面那样直接使用abcdefg),我就无法做同样的事情。

pattern=abcdefg
sed '/$pattern/ s/^/#/' file.sql > file.commented

看起来它正在逃避美元角色而不是取得变量的值。

你如何用awk做同样的事?

1 个答案:

答案 0 :(得分:3)

您需要使用双引号使其适用于shell中的变量:

sed "/$pattern/ s/^/#/" file.sql > file.commented

您还可以使用shell的内联功能来保存输入文件本身的更改

sed -i.bak "/$pattern/ s/^/#/" file.sql

但最好避免sed此作业,因为如果$pattern包含/或某些特殊的正则表达式元,则使用正则表达式及以上命令会中断字符。最好像这样使用awk

awk -v p="$pattern" 'index($0, p) {$0 = "#" $0} 1' file.sql > file.commented