你可以使用类似的东西:
sed 's/foo/barfoo/g' baz
(末尾的g 表示全局,每行的每一次出现,而不仅仅是第一次出现)。
对于 任意(而非固定)模式,例如 foo[0-9],您可以使用如下捕获组:
pax$ echo 'xyz fooA abc
xyz foo5 abc
xyz fooB abc' | sed 's/\(foo[0-9]\)/bar\1/g'
xyz fooA abc
xyz barfoo5 abc
xyz fooB abc
括号捕获与模式匹配的实际文本,\1 在替换中使用它。
您可以在此模式中使用任意复杂的模式,包括确保只匹配完整的单词。例如,仅当它立即被单词边界包围时才更改模式:
pax$ echo 'xyz fooA abc
xyz foo5 abc foo77 qqq xfoo4 zzz
xyz fooB abc' | sed 's/\(\bfoo[0-9]\b\)/bar\1/g'
xyz fooA abc
xyz barfoo5 abc foo77 qqq xfoo4 zzz
xyz fooB abc
就捕获组的工作方式而言,您可以使用括号来存储与模式匹配的文本,以便以后在替换中使用。捕获的标识符基于从左到右读取的 ( 字符,因此是正则表达式(为了清楚起见,我省略了 \ 转义字符并稍微填充了它):
( ( \S* ) ( \S* ) )
^ ^ ^ ^ ^ ^
| | | | | |
| +--2--+ +--3--+ |
+---------1---------+
当应用于文本 Pax Diablo 时,会为您提供三个组:
\1 = Pax Diablo
\2 = Pax
\3 = Diablo
如下图:
pax$ echo 'Pax Diablo' | sed 's/\(\(\S*\) \(\S*\)\)/[\1] [\2] [\3]/'
[Pax Diablo] [Pax] [Diablo]