在文件中,我找到了一个我想要匹配的模式。当我找到它时,然后我在上面插入一行,但我似乎无法做的是采用模式空间并将其附加到我试图插入的行。像这样:
/xxx/ i\inserting this line and &
希望“&”将像s
一样打印图案空间提前问候并感谢 候选人Creigh
答案 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无法得到您i
或a
的内容。你可以通过将结果传递给第二个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 {
所以最后我得到了在我的行上方插入一行的结果,其中包含该行的内容。 (希望有意义吗?)