仅在与模式匹配的行中替换子字符串

时间:2018-05-12 18:42:20

标签: bash sed bsd

如果我想要替换的行的某一部分包含一个子字符串列表,我怎样才能在sed中运行替换?

例如,在以下示例输入中,用于标记我要替换的行的子字符串为123456abc

# jdggsdihdf, 123
# ljhkhkjh, 789
# fagdfhgghjasfa, 456
# jsajspjsdighishxc, abc
# jgasdjGA, def

因此,只应修改这些行,而789def的行应保持不变:

Replaced text, 123
# ljhkhkjh, 789
Replaced text, 456
Replaced text, abc
# jgasdjGA, def

我知道如何进行简单的s/foo/bar/替换,所以我可以做s/^# .*,/Replaced text,/,但我不知道该怎么做只有当该行也匹配其中一个字段中的字符串时想要替换更改。

1 个答案:

答案 0 :(得分:1)

第一个问题:

sed 's/^#.*,/replaced_text/'  Input_file

第二个问题:

sed 's/\, [^ ]*/,/' Input_file

要修改Input_file本身使用sed -i选项,也要使用sed -i.bak选项备份Input_file。