【问题标题】:sed command not updating text file [duplicate]sed 命令不更新文本文件 [重复]
【发布时间】:2015-04-16 19:21:34
【问题描述】:

想问一下,因为我在 unix 脚本中遇到了 sed 命令的问题。

#!/bin/sh
cnt=2
sed '1 c\
$cnt' test.txt

我想将文本文件 test.txt 的第一行替换为变量 cnt 的值为 2。如何在上述 sed 命令中传递变量? sed 命令将 $cnt 视为字符串。

【问题讨论】:

    标签: regex shell unix sed hp-ux


    【解决方案1】:

    改为:

    #!/bin/sh
    cnt=2
    sed "1 c\
    $cnt" test.txt
    

    要进行变量插值,您需要将其放在双引号内而不是单引号内。

    【讨论】:

    • 我收到一个错误:“sed:函数 1 c2 无法解析。”当我尝试将其从单引号更改为双引号时...
    • 我没有收到该错误,请尝试将其更改为 sed "1 c $cnt" test.txt(单行)
    • 我更改为:
    • sed "1 c $cnt" test.txt 我也试过: sed "1 c\ $cnt" test.txt
    • sed "1 c ${cnt}" test.txt 我尝试了上述方法,但仍然出现错误。
    【解决方案2】:

    变量不在单引号中展开。不过,它们用双引号展开。

    sed "1 c\\
    $cnt" test.txt
    

    请注意sed 默认情况下不会更新输入文件,而是输出更改后的版本。如果您的 sed 实现支持它,请使用 -i 开关修改输入文件。否则,您必须将输出重定向到一个新文件并将其重命名为原始名称:

    sed "..." text.txt > text.new
    mv text.new text.txt
    

    【讨论】:

    • 我收到一个错误:“sed: Function 1 c2 cannot be parses.”
    • @user3051523:抱歉,您需要转义反斜杠。检查更新。
    • 它工作了,但 test.txt 没有更新。
    • @user3051523:你读过完整的答案吗?
    • 谢谢,我想我应该使用你提到的 -i ..
    猜你喜欢
    • 2021-04-28
    • 2018-10-07
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2021-12-18
    • 2017-01-05
    • 1970-01-01
    相关资源
    最近更新 更多