shell Sed命令追加到特定文本的下方

vddsk6oq  于 2023-06-24  发布在  Shell
关注(0)|答案(2)|浏览(138)

我有一个场景,我想添加一些内容下面的特定行如下所示。

func (v version) string(){
    vers := [...]string{
        "4",
        "5",
       //"6",         //this should be added
        "vE",
    }

上面是我的代码块,我想添加“6”,下面“5”使用sed操作。我看了很多文章和帖子,但没有得到正确的答案。
我所尝试的是

current_number = '"5",'
    next_number = '"6",'    
    os.system("sed -i /"+current_number+"/a"+next_number+" sample.txt")

编辑1:在@steffen的回答后,我得到下面的错误,图像attached.

yi0zb3m4

yi0zb3m41#

它的工作原理:

$ sed '/"5",/a"6",' file
func (v version) string(){
    vers := [...]string{
        "4",
        "5",
"6",
        "vE",
    }

但我认为你需要加上单引号。我想你的命令是:

sed -i /"5",/a"6", sample.txt

这相当于:

sed -i /5,/a6, sample.txt

下面是如何使用变量:

PATTERN='"5",'
NEWLINE='"6",'
sed "/$PATTERN/a$NEWLINE" file
sed '/'"$PATTERN"'/a'"$NEWLINE" file # alternatively

后者使用惯用格式,'用于所有文字,"用于变量。

i2loujxw

i2loujxw2#

给定这些变量:

$ current_number='"5"'
$ next_number='"6"'

如果你真的想使用sed,你可以做以下事情来保留新行的缩进:

$ sed -n 'p; s/'"$current_number"'/'"$next_number"'/p' file
func (v version) string(){
    vers := [...]string{
        "4",
        "5",
        "6",
        "vE",
    }

但就我个人而言,我会使用awk来简化未来的更新,维护等:

$ awk -v old="$current_number" -v new="$next_number" '{print} sub(old,new)' file
func (v version) string(){
    vers := [...]string{
        "4",
        "5",
        "6",
        "vE",
    }

awk -i inplace ...与GNU awk一起使用,就像将sed -i ...与GNU sed一起使用一样,来更新输入文件。

相关问题