3

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

/xxx/ i\inserting this line and &

希望“&”能像 s 一样打印模式空间

预先问候并感谢克雷

4

3 回答 3

2

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

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

参考评论:

sed '/public String getFirstName()/s/.*\("[^"]*"\).*/@XmlElement(name=\1)\n&/' file
于 2012-11-08T10:33:18.307 回答
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/ /'
于 2012-11-08T07:43:27.500 回答
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 {

所以最后我得到了期望的结果,即在我的行上方插入一行,其中包含该行的内容。(希望这是有道理的?)

于 2012-11-08T14:57:24.750 回答