SED:在图案上方插入线条并将图案空间附加到其上

时间:2012-11-08 07:05:31

标签: design-patterns insert sed

在文件中,我找到了一个我想要匹配的模式。当我找到它时,然后我在上面插入一行,但我似乎无法做的是采用模式空间并将其附加到我试图插入的行。像这样:

/xxx/ i\inserting this line and &

希望“&”将像s

一样打印图案空间

提前问候并感谢 候选人Creigh

3 个答案:

答案 0 :(得分:2)

这可能适合你(GNU sed):

sed -er '/.*(xxx).*/s//inserting this line and \1\n&/' file

参考评论:

sed '/public String getFirstName()/s/.*\("[^"]*"\).*/@XmlElement(name=\1)\n&/' file

答案 1 :(得分:0)

我认为sed无法得到您ia的内容。你可以通过将结果传递给第二个sed来实现,或者如果你使用的是GNU sed,你可以这样做:

sed '/xxx/ s//cat file_to_insert | head -c-1; echo " &"/e' infile

假设您要插入的内容位于infile。替换的e标志用/bin/sh执行模式空间中的文本,然后结果替换命令。根据输入的大小和/bin/sh的链接,这可能效率低下。

这是通过两次sed调用来实现它的一种方法:

<infile sed '/xxx/i\inserting this line and' | sed 'N; /\nxxx/! {P; D}; s/\n/ /'

答案 2 :(得分:0)

我自己也在研究解决方案。在这种类似的情况下,我有一个公共类行

public class SomeStatusCode extends AbstractEntity implements Serializable {

我希望在其上面添加一个@XmlRootElement注释。在.sed文件中,我有以下

/public class [A-Za-z0-9]* .*/ {
        h
        s/public class \([A-Za-z0-9]*\) .*/\1")/    
        s/^/@Xml RootElement(name = "/
        p
        x
}

结果是:

@Entity
@Table(name="SOME_STATUS_CODE")
@Xml RootElement(name = "SomeStatusCode")
public class SomeStatusCode extends AbstractEntity implements Serializable {

所以最后我得到了在我的行上方插入一行的结果,其中包含该行的内容。 (希望有意义吗?)