在bash的文件中的两行之间添加一行

时间:2017-01-08 12:51:45

标签: bash macos search replace sed

我的文件名为user.rb,如下所示:

class User < ApplicationRecord
end

我想添加一个新行,添加行后会显示:

class User < ApplicationRecord
  include Company
end

但是我想从bash脚本或终端添加这个额外的行。  我用这个bash代码尝试了它:

sed -i '' 's/end/include Company\n\end/' app/models/user.rb

但添加行后它不会返回新行。 请帮帮我。

2 个答案:

答案 0 :(得分:2)

使用sed,在匹配后追加(a)所需的部分(此处我在该行的末尾匹配< ApplicationRecord):

sed '/<[[:blank:]]*ApplicationRecord$/a\    include Company' file.rb

使用.bak扩展程序备份的原始文件就地编辑文件:

sed -i.bak '/<[[:blank:]]*ApplicationRecord$/a\    include Company' file.rb

没有任何备份:

sed -i '' '/<[[:blank:]]*ApplicationRecord$/a\    include Company' file.rb

示例:

$ cat file.rb 
class User < ApplicationRecord
end

$ sed '/<[[:blank:]]*ApplicationRecord$/a\    include Company' file.rb 
class User < ApplicationRecord
    include Company
end

答案 1 :(得分:1)

在OSX上,您可以使用此sed命令:

sed -i.bak '/ApplicationRecord$/,/^end$/{/end$/i\
include Company
}' file