选择性地使用sed

选择性地使用sed,sed,awk,grep,Sed,Awk,Grep,我的转储文件看起来像这样 -- -- Current Database: `Batch` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `Batch` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */; USE `Batch`; -- -- Table structure for table `BATCH_JOB_EXECUTION` -- DROP TABLE IF EXISTS `

我的转储文件看起来像这样

--
-- Current Database: `Batch`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `Batch` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;

USE `Batch`;

--
-- Table structure for table `BATCH_JOB_EXECUTION`
--

DROP TABLE IF EXISTS `BATCH_JOB_EXECUTION`;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `BATCH_JOB_EXECUTION` (
  `JOB_EXECUTION_ID` bigint(20) NOT NULL,
  `VERSION` bigint(20) default NULL,
我想将create表和“use”语句中的DB名称更改为pd_Batch

sed 's/Batch/pd_Batch/' test.sql
上述声明将起到必要的作用。但我不想改变任何“批量”字。它应该只更改行中找到的单词 从创建数据库或使用开始

更新:

这个问题的副产品是test.sql文件中有多个DB。所以下面的单词需要加上前缀pd_

Batch
cash
country
rules
currency
state

谢谢是否可以在一个sed中更改多个DB名称?@shan:是的,类似于
sed'/CREATE DATABASE\| USE/{s/Batch/pd_Batch/;s/Foo/pd_Foo/;s/Bar/pd_Bar/}之类的内容
谢谢。可以在一个sed中更改多个DB名称吗?@shan:是的,类似于
sed'/CREATE DATABASE\| USE/{s/Batch/pd_Batch/;s/Foo/pd_Foo/;s/Bar/pd_Bar/}
sed '/CREATE DATABASE\|USE/s/Batch/pd_Batch/' test.sql