将字符串添加到包含模式的行的开头
Add a string to the beginning of a line containing a pattern
我正在尝试注释脚本中存在给定模式列表中的模式的行。现在,我可以在命令行上按以下方式执行此操作:
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([=12=], p) {[=12=] = "#" [=12=]} 1' file.sql > file.commented
我正在尝试注释脚本中存在给定模式列表中的模式的行。现在,我可以在命令行上按以下方式执行此操作:
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([=12=], p) {[=12=] = "#" [=12=]} 1' file.sql > file.commented