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

标签 regex bash awk sed vi

<分区>

我正在尝试注释脚本中存在给定模式列表中的模式的行。现在,我可以在命令行上按以下方式执行此操作:

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

关于regex - 将字符串添加到包含模式的行的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28625981/

相关文章:

javascript - 正则表达式、字符数限制

regex - Linux重命名命令首字母大写

java - 正则表达式匹配a-字母数字&b-数字&c-数字

java - 将 s 识别为元音后最后一个字符的正则表达式模式

linux - 在 awk 的 BASH shell 中使用 bc 作为守护进程

linux - bash + 如何从线路中捕获IP地址

linux - Bash 按包含年份和缩写月份的文件名对文件进行排序

regex - 结合删除标签正则表达式和删除 sed 中的空行 - Unix

bash - 执行时保留颜色代码

awk - 如何使用 awk 重命名重复行?