首页 > 解决方案 > 从脚本中删除双引号

问题描述

我试图从下面的代码中删除一些双引号,但仅限于某些点。该代码保存在我试图从命令行操作的 .psql 脚本中的 Unix 机器上。我尝试了一些 sed 命令,但我正在努力隔离我想要的部分并不断丢失所有引号。我想做的是:

1 - 将所有双引号保留到 CREATE 语句的“AS SELECT”部分。括号和前面的所有内容都需要保留引号。

2 - 在 CREATE 语句的“AS SELECT”部分之后,我想去掉引号直到“;” 在包括 WHERE 子句的 CREATE 语句的末尾。

3 - 下面还有一些 COMMENT 语句,我只想删除语句“IS E'”部分之前的任何引号。这之后的任何事情都很好。

4 - 下面是我的代码示例以及它在我手动修复后的外观。任何有助于自动化并节省我的小手指的帮助都会很棒!

我的代码:

CREATE OR REPLACE VIEW "devices_loomis" ("id", "key", "signal", "status", "active", "local", "tep", "os_name", "mod_name", "mtime", "muser", "ctime", "cuser", "remark") AS SELECT  "d".ID, "d".KEY, "d".SIGNAL, "d".STATUS, "d".ACTIVE, "d".LOCAL, "d".TEP, "d".OS_NAME, "d".MOD_NAME, "d".MTIME, "d".MUSER, "d".CTIME, "d".CUSER, "d".REMARK  FROM DEVICES d, ATTRIBUTES a WHERE "d".ID = "a".DEV_ID AND "a".TOK_NAME='Responsible' AND "a".VALUE = 'Loomis';

COMMENT ON VIEW "DEVICES_LOOMIS"  IS E'View of Loomis devices.';
COMMENT ON COLUMN "DEVICES_LOOMIS".ACTIVE IS E'Set if device "is" active.';

这些是我一直在使用的 sed 命令,但它们似乎相互覆盖。

sed '/COMMENT ON VIEW/s/"\(.*\)".*IS/\1 IS/g' it.text
sed '/COMMENT ON COLUMN/s/"\(.*\)".\(.*\).*IS/\1.\2 IS/g' it.text
sed '/CREATE OR REPLACE VIEW/s/AS SELECT.*"\(.*\)".*FROM/AS SELECT \1 FROM/g' it.text

手动修复后:

CREATE OR REPLACE VIEW "devices_loomis" ("id", "key", "signal", "status", "active", "local", "tep", "os_name", "mod_name", "mtime", "muser", "ctime", "cuser", "remark") AS SELECT  d.ID, d.KEY, d.SIGNAL, d.STATUS, d.ACTIVE, d.LOCAL, d.TEP, d.OS_NAME, d.MOD_NAME, d.MTIME, d.MUSER, d.CTIME, d.CUSER, d.REMARK  FROM DEVICES d, ATTRIBUTES a WHERE d.ID = a.DEV_ID AND a.TOK_NAME='Responsible' AND a.VALUE = 'Loomis';

COMMENT ON VIEW DEVICES_LOOMIS  IS E'View of Loomis devices.';
COMMENT ON COLUMN DEVICES_LOOMIS.ACTIVE IS E'Set if device "is" active.';

标签: bashshellunix

解决方案


推荐阅读