【问题标题】:replace a whole line from a specific line to a specific line using sed [duplicate]使用 sed 将整行从特定行替换为特定行 [重复]
【发布时间】:2020-04-29 18:47:15
【问题描述】:

我已经完成了这段代码来使用 sed 将特定行替换为特定行:

i=5

while (( i <= 10 ))
        do
                sed -i '$i s/.*/change/' file.txt
                ((i++))
        done

这是文件.txt

1.  alloha
2.  this
3.  is
4.  just
5.  a
6.  test
7.  nonsense
8.  words
9.  at
10. all
11. as
12. you
13. can
14. see

运行脚本后,file.txt 更改为:

1.  alloha
2.  this
3.  is
4.  just
5.  a
6.  test
7.  nonsense
8.  words
9.  at
10. all
11. as
12. you
13. can
14. s/.*/change/
15. s/.*/change/
16. s/.*/change/
17. s/.*/change/
18. s/.*/change/
19. s/.*/change/
20. see

我相信 sed 命令可以正常工作,因为我在命令行中对其进行了测试,并且可以按我的意愿工作,我认为问题出在 i 变量上。

所以有人知道如何使它工作吗?

【问题讨论】:

    标签: linux bash shell sed command-line


    【解决方案1】:

    经过一番搜索,我发现如果我想在 sed 命令中使用变量,我必须使用双引号 ""

    所以我用"" 代替了'',正如您在以下代码中看到的那样:

    i=5
    
    while (( i <= 10 ))
    do
        sed -i  "$i s/.*/change/" file.txt
        ((i++))
    done
    

    现在它可以完美运行了。 更多详情请点击here

    【讨论】:

      【解决方案2】:

      这似乎适用于那个简单的用例,但 sed 运行 5 次只是为了编辑该文件。 sed 可以在一次调用中完成,并且在运行 sed 5 次时不涉及循环!

      sed -s '5,10s/\(^.*[[:space:]]\)*.*$/\1change/' file.txt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-29
        • 2021-10-21
        • 2017-08-11
        • 2016-11-21
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多