我们可以在sed中使用正则表达式吗?

时间:2016-11-28 12:57:43

标签: regex shell sed

我有一个包含许多部分的示例文件。一个部分中可以有多个新行。因此,我们可以在一个部分中遇到多个新行(\ n)。

Section1

Section2
(
    (a)   (b)
    (c)   (d)
    (e)   (f)
))

Section 3

我想用其他一些内容替换第2节的所有内容。所以,我知道的一件事就是那个部分以连续的方式结束。有没有办法可以通过sed使用正则表达式来实现。我想只通过shell脚本来实现。

我知道我可以给予

sed/findpattern/replacementtext/g

如何在此处添加regex以填充findpattern。我可以在这里提供一个完整的正则表达式吗?

预期产出

 Section1

    Section2
    (
        (m)   (n)
        (o)   (p)
        (q)   (r)
    ))

    Section 3

首先需要找到第2部分内容,然后需要将其替换为上述内容。

3 个答案:

答案 0 :(得分:3)

使用c(更改)命令:

sed '
/Section2/,/))/c \
    Section2 \
    ( \
        (m)   (n) \
        (o)   (p) \
        (q)   (r) \
    ))
' file

答案 1 :(得分:0)

当然,这是我提出的一个例子,您可以使用它来满足您的需求:

echo 'foo (a) bar' | sed 's/\((\)\([a-zA-Z]*\)\()\)/\1something_else\3/'

输入:

foo (a) bar

输出:

foo (something_else) bar

\ 1和\ 3表示组打开和关闭括号,而\ 2组的内容位于这两个括号之间。

答案 2 :(得分:0)

如果您只想缩进该部分,您只需在每行的开头插入四个空格(或制表符):

sed '^/Section2/,/^))/s/^/    /;' file