使用sed将脚本中的几行替换为一行

使用sed将脚本中的几行替换为一行,sed,Sed,假设我有一个脚本,其中我想将几行更改为一行 例如,我得到了一个新函数,它可以总结几个命令,这样我就可以在脚本中替换如下: 原创的 some_code command1 command2 command3 some_more_code 编辑 some_code foo() some_more_code 您将如何使用sed实现这一点 我在这里回答我自己的问题 我想不出一个一次性解决问题的方法,所以我把问题分为两部分 第1部分:更换第一行 sed -e 's/command1/foo()/g' f

假设我有一个脚本,其中我想将几行更改为一行

例如,我得到了一个新函数,它可以总结几个命令,这样我就可以在脚本中替换如下:

原创的

some_code
command1
command2
command3
some_more_code
编辑

some_code
foo()
some_more_code

您将如何使用sed实现这一点

我在这里回答我自己的问题

我想不出一个一次性解决问题的方法,所以我把问题分为两部分

第1部分:更换第一行

sed -e 's/command1/foo()/g' file1 > file2
第2部分:拆下其余的管路

sed -e '/command2/,+1d/' file2 > file3

不过,我更喜欢一种更优雅的方式,在这种方式中,我可以灵活地替换行数,可能匹配块中的最后一个命令。有什么想法吗?

我在这里回答我自己的问题

sed '/some_code/,/command3/ !b
/some_code/ b
/command3/ a\
foo()
d' YourFile
我想不出一个一次性解决问题的方法,所以我把问题分为两部分

第1部分:更换第一行

sed -e 's/command1/foo()/g' file1 > file2
第2部分:拆下其余的管路

sed -e '/command2/,+1d/' file2 > file3

不过,我更喜欢一种更优雅的方式,在这种方式中,我可以灵活地替换行数,可能匹配块中的最后一个命令。有什么想法吗?

我在这里回答我自己的问题

sed '/some_code/,/command3/ !b
/some_code/ b
/command3/ a\
foo()
d' YourFile
我想不出一个一次性解决问题的方法,所以我把问题分为两部分

第1部分:更换第一行

sed -e 's/command1/foo()/g' file1 > file2
第2部分:拆下其余的管路

sed -e '/command2/,+1d/' file2 > file3

不过,我更喜欢一种更优雅的方式,在这种方式中,我可以灵活地替换行数,可能匹配块中的最后一个命令。有什么想法吗?

我在这里回答我自己的问题

sed '/some_code/,/command3/ !b
/some_code/ b
/command3/ a\
foo()
d' YourFile
我想不出一个一次性解决问题的方法,所以我把问题分为两部分

第1部分:更换第一行

sed -e 's/command1/foo()/g' file1 > file2
第2部分:拆下其余的管路

sed -e '/command2/,+1d/' file2 > file3
不过,我更喜欢一种更优雅的方式,在这种方式中,我可以灵活地替换行数,可能匹配块中的最后一个命令。有什么想法吗

sed '/some_code/,/command3/ !b
/some_code/ b
/command3/ a\
foo()
d' YourFile
  • 在任何模式(除了foo()行)中,都要注意元字符(如
    &\\^$[]{}()。
  • 在任何模式(除了foo()行)中,都要注意元字符(如
    &\\^$[]{}()。
  • 在任何模式(除了foo()行)中,都要注意元字符(如
    &\\^$[]{}()。
  • 在任何模式(除了foo()行)中,都要注意元字符(如
    &\\^$[]{}()。
这可能适合您(GNU-sed):

这可能适用于您(GNU-sed):

这可能适用于您(GNU-sed):

这可能适用于您(GNU-sed):

只需使用awk:

$ awk -v RS='^$' -v ORS= '{sub(/command1\ncommand2\ncommand3/,"foo()")}1' file
some_code
foo()
some_more_code
以上使用GNU awk进行多字符RS。

只需使用awk即可:

$ awk -v RS='^$' -v ORS= '{sub(/command1\ncommand2\ncommand3/,"foo()")}1' file
some_code
foo()
some_more_code
以上使用GNU awk进行多字符RS。

只需使用awk即可:

$ awk -v RS='^$' -v ORS= '{sub(/command1\ncommand2\ncommand3/,"foo()")}1' file
some_code
foo()
some_more_code
以上使用GNU awk进行多字符RS。

只需使用awk即可:

$ awk -v RS='^$' -v ORS= '{sub(/command1\ncommand2\ncommand3/,"foo()")}1' file
some_code
foo()
some_more_code

上面将GNU awk用于多字符RS。

首先,您可以在同一个sed调用中处理这两个命令,即,
sed的/command1/foo()/命令2/,+1d'文件1>文件2
。不过,我不完全确定这种方法是否太脆弱。您是否正在寻找替换多行正则表达式?它可能适合您的需要,但如果您的命令序列是
cmd1;cmd2;cmdX;cmd3
您的两行代码将破坏您的脚本。您的脚本仅适用于连续的cmds1-3。您也可以使用awk检查此模式。可以使用awk.idea进行多行匹配-使用合适的工具进行匹配。sed是面向行的,因此用于单个行上的简单替换,不适用于涉及多行的任何内容。只要使用awk,它就是为这样的东西而设计的。我知道sed可能不是最好的工具,但它仍然可以工作。好吧,对于初学者来说,你可以在同一个sed调用中处理这两个命令,即,
sed的/command1/foo()/命令2/,+1d'文件1>文件2
。不过,我不完全确定这种方法是否太脆弱。您是否正在寻找替换多行正则表达式?它可能适合您的需要,但如果您的命令序列是
cmd1;cmd2;cmdX;cmd3
您的两行代码将破坏您的脚本。您的脚本仅适用于连续的cmds1-3。您也可以使用awk检查此模式。可以使用awk.idea进行多行匹配-使用合适的工具进行匹配。sed是面向行的,因此用于单个行上的简单替换,不适用于涉及多行的任何内容。只要使用awk,它就是为这样的东西而设计的。我知道sed可能不是最好的工具,但它仍然可以工作。好吧,对于初学者来说,你可以在同一个sed调用中处理这两个命令,即,
sed的/command1/foo()/命令2/,+1d'文件1>文件2
。不过,我不完全确定这种方法是否太脆弱。您是否正在寻找替换多行正则表达式?它可能适合您的需要,但如果您的命令序列是
cmd1;cmd2;cmdX;cmd3
您的两行代码将破坏您的脚本。您的脚本仅适用于连续的cmds1-3。您也可以使用awk检查此模式。可以使用awk.idea进行多行匹配-使用合适的工具进行匹配。sed是面向行的,因此用于单个行上的简单替换,不适用于涉及多行的任何内容。只要使用awk,它就是为这样的东西而设计的。我知道sed可能不是最好的工具,但它仍然可以工作。好吧,对于初学者来说,你可以在同一个sed调用中处理这两个命令,即,
sed的/command1/foo()/命令2/,+1d'文件1>文件2
。不过,我不完全确定这种方法是否太脆弱。您是否正在寻找替换多行正则表达式?它可能适合您的需要,但如果您的命令序列是
cmd1;cmd2;cmdX;cmd3
您的两行代码将破坏您的脚本。您的脚本仅适用于连续的cmds1-3。您也可以使用awk检查此模式。可以使用awk.idea-us进行多行匹配