gpt4 book ai didi

bash - 如何使用 sed 命令在模式字符串之前添加一个字符串?

转载 作者:行者123 更新时间:2023-11-29 08:52:27 25 4
gpt4 key购买 nike

我想使用 sed 修改名为“baz”的文件。

当我搜索模式 foo 时,foo 不在行首或行尾,我想在 foo 之前附加 bar,我该如何使用 sed 来实现?

Input file named baz:
blah_foo_blahblahblah
blah_foo_blahblahblah
blah_foo_blahblahblah
blah_foo_blahblahblah

Output file
blah_barfoo_blahblahblah
blah_barfoo_blahblahblah
blah_barfoo_blahblahblah
blah_barfoo_blahblahblah

最佳答案

你可以只使用类似的东西:

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]

关于bash - 如何使用 sed 命令在模式字符串之前添加一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6619917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com