我正在尝试评论我的脚本中的行,其中存在来自给定模式列表的模式。现在,我可以在命令行上执行以下操作:
sed '/abcdefg/ s/^/#/' file.sql > file.commented
但是如果我使用变量作为模式(而不是像上面那样直接使用abcdefg),我就无法做同样的事情。
pattern=abcdefg
sed '/$pattern/ s/^/#/' file.sql > file.commented
看起来它正在逃避美元角色而不是取得变量的值。
你如何用awk做同样的事?
答案 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