我有一个包含许多部分的示例文件。一个部分中可以有多个新行。因此,我们可以在一个部分中遇到多个新行(\ 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部分内容,然后需要将其替换为上述内容。
答案 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