unix 找到单词并删除单词和下一组括号,但保留括号之间的所有内容

6qftjkof  于 2022-11-04  发布在  Unix
关注(0)|答案(1)|浏览(209)

我有一个文件,其中包含数百个类似的片段,下面,我如何使用sed(或awk)改变任何出现的“从表(xxxx)”到“从xxxx”?
我正在尝试删除“table”一词以及“xxxx”的实际表名周围的任何括号。
也可以有分号“;“也在这条线的末端,需要保留。

更改此...

...
     delete from r
     where (r.action_code, r.region_id) in ( SELECT action_code, region_id
                                               from table(paper_table)  --this line
                                           );
    insert into table_r(action_code, region_id, indicator_ind)
        SELECT t.action_code,
               t.region_id,
               t.indicator_ind
               from table(cheese_table) t;   --this line
...

"到这个..."

...
         delete from r
         where (r.action_code, r.region_id) in ( SELECT action_code, region_id
                                                   from paper_table   --this line
                                               );
        insert into table_r(action_code, region_id, indicator_ind)
            SELECT t.action_code,
                   t.region_id,
                   t.indicator_ind
                   from cheese_table t;   --this line
....

谢谢你!

ebdffaop

ebdffaop1#

我将使用GNU sed来完成这个任务,让file.txt内容为

delete from r
 where (r.action_code, r.region_id) in ( SELECT action_code, region_id
                                           from table(paper_table)  --this line
                                       );
insert into table_r(action_code, region_id, indicator_ind)
    SELECT t.action_code,
           t.region_id,
           t.indicator_ind
           from table(cheese_table) t;   --this line

然后

sed 's/from table(\([^)]*\))/from \1/g' file.txt

给出输出

delete from r
 where (r.action_code, r.region_id) in ( SELECT action_code, region_id
                                           from paper_table  --this line
                                       );
insert into table_r(action_code, region_id, indicator_ind)
    SELECT t.action_code,
           t.region_id,
           t.indicator_ind
           from cheese_table t;   --this line

说明:我使用了from table后面的( ... )中的caputring组,从中我指定了除)和零个或更多个重复之外的所有字符(*)、注意,没有以\作为前缀()表示文字(,而以\作为前缀的)用于定界捕获组。

  • (已在GNU sed 4.2.2中测试)*

相关问题