我想将匹配结果的特定部分存储为变量,以供以后替换。我想把它放在一个衬里,而不是事先找到我需要的变量。
在配置 apache 并使用 mod_rewrite 时,您可以指定要用作变量的模式的特定部分,如下所示:
RewriteRule ^www.example.com/page/(.*)$ http://www.example.com/page.php?page=$1 [R=301,L]
括号内包含的模式匹配部分存储为 $1 以供以后使用。因此,如果 url 是www.example.com/page/home
,它将被替换为www.example.com/page.php?page=home
。因此,匹配的“home”部分保存在 $1 中,因为它是括号内的模式部分。
我想要一个类似这个功能的sed
命令,我需要自动替换 SQL 转储文件中的许多字符串,在每个创建表之前添加删除表(如果存在)命令,但我需要知道表名才能做到这一点,所以如果转储文件包含以下内容:
...
CREATE TABLE `orders`
...
我需要运行类似的东西:
cat dump.sql | sed "s/CREATE TABLE `(.*)`/DROP TABLE IF EXISTS $1\N CREATE TABLE `$1`/g"
得到结果:
...
DROP TABLE IF EXISTS `orders`
CREATE TABLE `orders`
...
我在sed
命令中使用 mod_rewrite 语法作为我正在尝试做的逻辑示例。
有什么建议么?