正则表达式 – 在包含模式的行的开头添加一个字符串

前端之家收集整理的这篇文章主要介绍了正则表达式 – 在包含模式的行的开头添加一个字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Difference between single and double quotes in Bash                                    6个
我试图评论我的脚本中的行,其中存在来自给定模式列表的模式.现在,我可以在命令行上执行以下操作:

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

但是如果我使用变量作为模式(而不是像上面那样直接使用abcdefg),我就无法做到这一点.

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

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

你怎么用awk做同样的事情?

解决方法

您需要使用双引号使其适用于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

猜你在找的正则表达式相关文章