gpt4 book ai didi

linux - Sed 命令给出意想不到的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:43 26 4
gpt4 key购买 nike

下面是我试图找到含义的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 脚本的新手。提前致谢!

最佳答案

对于 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 结尾的情况。否则它不会匹配。

关于linux - Sed 命令给出意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16479119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com