下面是我试图找到意义的shell脚本。
sed 's/19984 $/98400 /' | sed 's/19992 $/99200 /'
我预计19984 $将被替换为98400,此字符串将传递给下一个sed命令,用99200替换19992 $。
但是当我使用示例输入
执行下面的脚本时echo "19984 $ need to be replaced with 98400 "| sed 's/19984 $/98400 /' | sed 's/19992 $/99200 /'
我得到相同的字符串
"19984 $ need to be replaced with 98400"
我希望我在这里失踪的东西。请帮我。我是shell脚本的新手。 提前谢谢!
答案 0 :(得分: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
结尾的情况。否则它将不匹配。