#cat secr.sql
spool /db/oradata/dump_db/test/IBS/TABLE/Z#PS$.sql
select dbms_metadata.get_ddl('TABLE','Z#PS$','IBS') c from dual;
host touch -t 0607270607 /db/oradata/dump_db/test/IBS/TABLE/Z#PS$.sql
spool /db/oradata/dump_db/test/IBS/INDEX/Z#IX_Z#PS$_REF3.sql
select dbms_metadata.get_ddl('INDEX','Z#IX_Z#PS$_REF3','IBS') c from dual;
host touch -t 0607270607 /db/oradata/dump_db/test/IBS/INDEX/Z#IX_Z#PS$_REF3>
spool /db/oradata/dump_db/test/IBS/INDEX/PK_Z#PS$_ID.sql
select dbms_metadata.get_ddl('INDEX','PK_Z#PS$_ID','IBS') c from dual;
host touch -t 0607270607 /db/oradata/dump_db/test/IBS/INDEX/PK_Z#PS$_ID.sql
spool /db/oradata/dump_db/test/IBS/INDEX/IDX_Z#PS$_COLL_ID.sql
select dbms_metadata.get_ddl('INDEX','IDX_Z#PS$_COLL_ID','IBS') c from dual;
host touch -t 0607270607 /db/oradata/dump_db/test/IBS/INDEX/IDX_Z#PS$_$COLL_>
spool /db/oradata/dump_db/test/IBS/TABLE/Z#PTL_HIST_REC.sql
<......>
есть файл с содержимым вида выше БОЛЬШООЙ файл
так вот заменить нужно символ $ на \\\$
причем замену нужно совершить в строках вида Z#IX_Z#PS$_REF3(.sql) на Z#IX_Z#PS\\\$_REF3.sqlв строках вида Z#IX_Z#PS$_REF3 без (.sql) замену не производить!!!
как это реализовать никак не пойму?
sed или perl по вкусу. Ваша проблема, что вы не умеете _четко_ формулировать критерий. Могу попробовать за вас:
заменить символ $ на \\\$ в строках кончающихся на .sql, предполагая что в этих строках всего одно вхождение данного символа.
Итого имеем регекс
для perl s/\$(.*)\.sql$/\\\\\\\$$1/
для sed s/\$\(.*\)\.sql$/\\\\\\\$\1.sql/