Unix 使用Sed匹配图案和预弯线

Unix 使用Sed匹配图案和预弯线,unix,sed,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:F7A01360E1EECD3565AF17

我试图使用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/\值“”/s/^/--/alterpwd.sql>>alterpwd_new.sql

您可以尝试以下方法:

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

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

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

,这可能适合您(GNU-sed):


要将
'
传递给sed,需要暴露底层shell,并引用
'
文件,即
sed'/'\'\'\''\'/d'文件
将删除包含两个相邻单引号的行

谢谢Oliv,但是建议的解决方案都不管用。如果我使用gnu版本的sed(我在OSX上),它对我来说是管用的
sed "s/^alter.*values '' ;$/--&/" file
sed '/values '\'\'' ;$/s/^/--/' file