【发布时间】:2015-06-09 21:38:11
【问题描述】:
我得到了一组通用命令,用作我必须执行的操作的示例:
1 cat /etc/dsh/machines.list | sed -e "s|\(.*\)|sshfs \1:/opt/dextor/cloud \1|"
2 cat /etc/dsh/machines.list | sed -e "s|\(.*\)|sshfs \1:/opt/dextor/cloud \1|" | sh
3 cat /etc/dsh/machines.list | sed -e "s|\(.*\)|cp run.sh \1/|"
4 cat /etc/dsh/machines.list | sed -e "s|\(.*\)|cp run.sh \1/|" | sh
这到底是做什么的?
我知道 machine.list 的内容正在传递给 sed,但 sed 命令在做什么?
谢谢!
【问题讨论】:
-
只需将
/etc/dsh/machines.list的每一行包装到这些命令中,并将\1替换为每一行的内容。我不得不说这是一种非常奇怪的做事方式。 -
更好的 sed 命令方式是 sed "s|^.*$|sshfs &:/opt/dextor/cloud &|"
-
@josifoski 最好不要使用 sed。
-
这是对反向引用表示法的不必要使用(
\n,其中 n 是单个数字)在这种情况下,替换命令左侧的整个模式都用于右手边。&是在这种情况下使用的正确元字符。 -
@josifoski
s|.*|sshfs &:/opt/dextor/cloud &|,如果你选择.*,则不需要^和$
标签: linux bash command-line sed