2014-04-01 84 views
0

我需要对包含如下内容的文件执行正则表达式捕获/重新获取。虽然我可以匹配事物,但我在捕捉替换时遇到问题。正则表达式替换(sed或perl)变量捕获

我想做到以下几点:

  1. 捕获,这将是在每种情况下的不同。
  2. 在引用表名的副本行之前添加一行。

因此,例如,copy mytable(将变成hello mytable\ncopy mytable(


采样输入

copy tablename(
     preferredid= 'c0»', 
     qid= 'c0»' with null(''), 
     qpi= 'c0»', 
     ptid= 'c0»' with null(''))... 

into '/idata2/backup/core/eq.ingres' 
+0

那么,如何采样输出是什么样子? '你好表名\ ncopy tablename'? – fedorqui

+0

's/^(?= copy tablename \()/ hello mytable \ n /'应该这样做。 – TLP

回答

2

试试这个:

sed 's/^copy \([^(]*\)($/hello \1\ncopy \1(/' 
+0

太棒了,谢谢 –

+1

+1但你可以简化一下:'sed's/^ copy \( [^(] * \)($/hello \ 1 \ n&/'' –

0

使用Perl的一个班轮

perl -i -pe 's/^(?=copy (\w+)\()/hello $1\n/' file