我正在尝试使用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
这可能对你有用(GNU sed(:
sed '/values '''' ;$/s/^/--/' file
要将'
传递给sed,需要暴露底层shell,并且引用'
,即sed '/''''/d' file
将删除包含两个相邻单引号的行。
你可以试试这个:
sed 's/^alter.*values x27x27 ;$/--&/' file
或
sed "s/^alter.*values '' ;$/--&/" file
注意两个命令中的外引号。使用双引号可以嵌入单引号。
对于单引号sed
脚本,您需要使用单引号ascii字符/x27
。