用 sed 替换多行
Replacing multiline with sed
我要更换
@Column("uuid", {
primary: true,
name: "id",
default: () => "uuid_generate_v4()",
})
和
@PrimaryGeneratedColumn
在包含以下内容的文件中:
export class SomeClass {
@Column("uuid", {
primary: true,
name: "id",
default: () => "uuid_generate_v4()",
})
id: string;
@Column("timestamp with time zone", {
name: "created_at",
default: () => "now()",
})
created_at: Date;
@Column("timestamp with time zone", {
name: "updated_at",
default: () => "now()",
})
updated_at: Date;
@Column("uuid", { name: "other_id", unique: true })
other_id: string;
}
这是我目前的解决方案:
sed -E -i '' -e '/@Column\(\"uuid\", \{/,/\}\)?/c @PrimaryGeneratedColumn\(\"uuid\"\)' fileName
基本可以,就是太不准确了,还替换了其他不该替换的台词。我尝试添加 uuid_generate_v4()
但无法使其正常工作,可能是因为换行符。
这可能适合您 (GNU sed):
sed '/@Column("uuid"/{:a;N;/^\s*})$/M!ba;/"uuid_generate_v4()/s/.*/@PrimaryGeneratedColum/}' file
收集包含 @Column("uuid"
和 })
的行,如果这些行也包含 uid_generate_v4()
,请将它们全部替换为 PrimaryGeneratedColum
。
使用 sed
,您可以锚定范围的末尾以阻止它与重复范围匹配。
$ sed -i '' -e '/@Column("uuid", {$/,/})/c\@PrimaryGeneratedColumn' input_file
rt class SomeClass {
@PrimaryGeneratedColumn
id: string;
@Column("timestamp with time zone", {
name: "created_at",
default: () => "now()",
})
created_at: Date;
@Column("timestamp with time zone", {
name: "updated_at",
default: () => "now()",
})
updated_at: Date;
@Column("uuid", { name: "other_id", unique: true })
other_id: string;
}
我要更换
@Column("uuid", {
primary: true,
name: "id",
default: () => "uuid_generate_v4()",
})
和
@PrimaryGeneratedColumn
在包含以下内容的文件中:
export class SomeClass {
@Column("uuid", {
primary: true,
name: "id",
default: () => "uuid_generate_v4()",
})
id: string;
@Column("timestamp with time zone", {
name: "created_at",
default: () => "now()",
})
created_at: Date;
@Column("timestamp with time zone", {
name: "updated_at",
default: () => "now()",
})
updated_at: Date;
@Column("uuid", { name: "other_id", unique: true })
other_id: string;
}
这是我目前的解决方案:
sed -E -i '' -e '/@Column\(\"uuid\", \{/,/\}\)?/c @PrimaryGeneratedColumn\(\"uuid\"\)' fileName
基本可以,就是太不准确了,还替换了其他不该替换的台词。我尝试添加 uuid_generate_v4()
但无法使其正常工作,可能是因为换行符。
这可能适合您 (GNU sed):
sed '/@Column("uuid"/{:a;N;/^\s*})$/M!ba;/"uuid_generate_v4()/s/.*/@PrimaryGeneratedColum/}' file
收集包含 @Column("uuid"
和 })
的行,如果这些行也包含 uid_generate_v4()
,请将它们全部替换为 PrimaryGeneratedColum
。
使用 sed
,您可以锚定范围的末尾以阻止它与重复范围匹配。
$ sed -i '' -e '/@Column("uuid", {$/,/})/c\@PrimaryGeneratedColumn' input_file
rt class SomeClass {
@PrimaryGeneratedColumn
id: string;
@Column("timestamp with time zone", {
name: "created_at",
default: () => "now()",
})
created_at: Date;
@Column("timestamp with time zone", {
name: "updated_at",
default: () => "now()",
})
updated_at: Date;
@Column("uuid", { name: "other_id", unique: true })
other_id: string;
}