【问题标题】:Add a line in between two lines in a file from bash在 bash 文件的两行之间添加一行
【发布时间】:2017-05-22 19:42:22
【问题描述】:
我有一个名为 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
但添加行后不返回新行。
请帮帮我。
【问题讨论】:
标签:
bash
macos
search
replace
sed
【解决方案1】:
使用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
【解决方案2】:
在 OSX 上,您可以使用此 sed 命令:
sed -i.bak '/ApplicationRecord$/,/^end$/{/end$/i\
include Company
}' file