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

bash – 在sed命令中使用占位符/变量

发布时间:2020-12-16 01:17:39 所属栏目:安全 来源:网络整理
导读:我想将匹配结果的特定部分存储为稍后用于替换的变量.我想把它保存在一个班轮中而不是找到我需要的变量. 在配置apache并使用mod_rewrite时,您可以指定要用作变量的模式的特定部分,如下所示: RewriteRule ^www.example.com/page/(.*)$http://www.example.com/
我想将匹配结果的特定部分存储为稍后用于替换的变量.我想把它保存在一个班轮中而不是找到我需要的变量.

在配置apache并使用mod_rewrite时,您可以指定要用作变量的模式的特定部分,如下所示:

RewriteRule ^www.example.com/page/(.*)$http://www.example.com/page.php?page=$1 [R=301,L]

括号内包含的模式匹配部分存储为$1以供日后使用.因此,如果网址为www.example.com/page/home,则会将其替换为www.example.com/page.php?page=home.所以比赛的“主场”部分保存在$1中,因为它是括号内部模式的一部分.

我希望像sed命令这样的功能,我需要自动替换SQL转储文件中的许多字符串,如果在每个create table之前存在命令,则添加drop table,但是我需要知道表名来执行此操作,所以如果转储文件包含以下内容:

...
CREATE TABLE `orders`
...

我需要运行类似的东西:

cat dump.sql | sed "s/CREATE TABLE `(.*)`/DROP TABLE IF EXISTS $1N CREATE TABLE `$1`/g"

得到的结果:

...
DROP TABLE IF EXISTS `orders`
CREATE TABLE `orders`
...

我在sed命令中使用mod_rewrite语法作为我正在尝试做的事情的逻辑示例.

有什么建议?

sed '/CREATE TABLE ([^ ]*)/ s//DROP TABLE IF EXISTS 1; &/'

查找CREATE TABLE语句并捕获表名.将其替换为“DROP TABLE IF EXISTS”和表名,加上分号以终止语句,以及匹配的内容副本以保留CREATE TABLE语句.

这是经典的sed表示法.由于你正在使用bash,你有可能使用GNU sed并且需要添加–posix来使用这种表示法,或者你需要使用脚本来使用GNU的非标准sed regex.我也没有尝试在输出中插入换行符.你可以用GNU sed做到这一点,如果它对你来说足够重要的话.

关键点是括号(通常需要使用反斜杠进行转义)是捕获机制,反斜杠数是替换机制.

(编辑:李大同)

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

    推荐文章
      热点阅读