脚本用linux

时间:2015-05-07 18:14:34

标签: sed

我想替换以下行:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "patient")

这一行:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "patient", cascade = CascadeType.ALL)

我更喜欢使用sed,但由于这些特殊字符,我无法让它工作。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

如果它只是那一行,你可以说

sed 's/)$/, cascade = CascadeType.All)/'

在结束正则表达式之前插入, cascade = CascadeType.All)$与此处的行尾相匹配)。

但是,我怀疑你有一个文件,其中有更多的行应该保持不变,并且你希望替换只发生在这一行。在这种情况下,您需要一些唯一标识该行的标准 - 最常见的是正则表达式。例如,如果这是唯一以@OneToMany(开头的行,则可以使用

sed '/^@OneToMany(/ s/)$/, cascade = CascadeType.All)/'

这将指示sed仅在当前行与正则表达式^@OneToMany(匹配时才尝试替换。如果有其他行以这种方式开始并且应保持不变,请找到唯一标识该行并使用它的正则表达式。

答案 1 :(得分:0)

以下是awk版本:

awk '/@OneToMany/ {sub(/\)/,", cascade = CascadeType.ALL&")}1' file
@OneToMany(fetch = FetchType.LAZY, mappedBy = "patient", cascade = CascadeType.ALL)