使用Sed匹配模式和前置行

时间:2018-10-31 16:10:20

标签: unix sed

我正在尝试使用sed搜索和匹配模式(正则表达式),并在匹配行前加上双破折号(-)。基本上,我的文件中包含以下内容:

alter user SYS identified by values '' ;
alter user PUBLIC identified by values '' ;
alter user DBA identified by values '' ;
alter user SYSTEM identified by values 
'S:F7A01360E1EECD3565AF171EF5A4109AC6656ABB9F0A1FA6EC11207AB091' ;
'S:82D55FF7743E74B4FCCF4DD2538C161DA2B29DE8688DBC8113EE4BAC9D49' ;
alter user EXP_FULL_DATABASE identified by values '' ;

我希望它看起来像这样:

--alter user SYS identified by values '' ;
--alter user PUBLIC identified by values '' ;
--alter user DBA identified by values '' ;
alter user SYSTEM identified by values 
'S:F7A01360E1EECD3565AF171EF5A4109AC6656ABB9F0A1FA6EC11207AB091' ;
 'S:82D55FF7743E74B4FCCF4DD2538C161DA2B29DE8688DBC8113EE4BAC9D49' ;
--alter user EXP_FULL_DATABASE identified by values '' ;

我尝试了以下方法,但没有运气:

sed / \ values''; / s / ^ /-/ a​​lterpwd.sql >> alterpwd_new.sql

2 个答案:

答案 0 :(得分:1)

这可能对您有用(GNU sed):

sed '/values '\'\'' ;$/s/^/--/' file

要传递'到sed,需要暴露底层外壳,并且用'引用的sed '/'\'\''/d' file会删除包含两个相邻单引号的行。

答案 1 :(得分:0)

您可以尝试以下方法:

sed 's/^alter.*values \x27\x27 ;$/--&/' file

sed "s/^alter.*values '' ;$/--&/" file

请注意两个命令中的外引号。使用双引号可以嵌入单引号。

使用单引号sed脚本时,需要使用单引号ascii字符/x27