【问题标题】:Sed command giving unexpected resultSed 命令给出意想不到的结果
【发布时间】:2013-05-10 17:55:00
【问题描述】:

下面是我试图找出含义的shell脚本。

sed 's/19984 $/98400 /' | sed 's/19992 $/99200 /'

我希望 19984 $ 将被替换为 98400 并且此字符串将传递给下一个 sed 命令,该命令将 19992 $ 替换为 99200 。

但是当我使用示例输入执行下面的脚本时

echo "19984 $ need to be  replaced with 98400  "| sed 's/19984 $/98400 /' | sed 's/19992 $/99200 /'

我得到相同的字符串

"19984 $ need to be  replaced with 98400"

我希望我在这里缺少一些东西。请帮我。我是 shell 脚本的新手。 提前致谢!

【问题讨论】:

    标签: linux shell unix sed


    【解决方案1】:

    对于 sed,$ 是一个保留字符,您必须对其进行转义 (\$) 才能正确解析:

    $ echo "19984 $ need to be  replaced with 98400  "| sed 's/19984 \$/98400 /' 
    98400  need to be  replaced with 98400
    

    大家一起:

    $ echo "19984 $ need to be  replaced with 98400  "| sed 's/19984 \$/98400 /' | sed 's/19992 \$/99200 /'
    98400  need to be  replaced with 98400
    

    所以你需要保持原样。

    $ 有很多含义:
    - 一个普通的角色。
    - 行尾。
    - 变量名。

    你得到代码的方式是第二种情况:行尾:

    $ echo "19984 " | sed 's/19984 $/98400 /'
    98400
    $ echo "19984 something" | sed 's/19984 $/98400 /'
    19984 something
    

    所以 sed 将只匹配行以19984 结尾的情况。否则不匹配。

    【讨论】:

    • 好的,很好。但我正在研究一个旧代码,他们将代码保持原样。那么他们的意思是什么
    • 刚刚更新了我的答案。您的原始代码意味着行尾,我希望这些示例有助于理解它。
    • 这就是我要找的!非常感谢 Fedorqui 先生
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2017-01-05
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多