加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:49:02 所属栏目:百科 来源:网络整理
导读:参见英文答案 Difference between single and double quotes in Bash????????????????????????????????????6个 我试图评论我的脚本中的行,其中存在来自给定模式列表的模式.现在,我可以在命令行上执行以下操作: sed '/abcdefg/ s/^/#/' file.sql file.commen
参见英文答案 > 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读