这个命令在做什么? SED

时间:2015-06-09 21:38:12

标签: linux bash command-line sed

我获得了一组通用命令,用作我必须执行的操作的示例:

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命令在做什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

我会向你解释cat /etc/dsh/machines.list | sed -e "s|\(.*\)|cp run.sh \1/|",其余的都是一样的。

1)cat将读取machines.list中的行并将其传递给sed。

2)sed基本上正在进行match and replace操作。

|用作分隔符,可以是任何字符,通常为/。它基本上像这个|match this|replace with this|一样工作。

您正在匹配\(.*\),它基本上告诉sed匹配所有内容。 .匹配每个字符,*表示匹配该字符任意次。 使用()会在\1中保存该匹配项。

在替换部分中,您将使用文字cp run.sh \1/替换它,而\1将包含匹配的内容。

我也认为根本不需要使用cat。以这种方式更好地使用sed -e "s|\(.*\)|cp run.sh \1/|" /etc/dsh/machines.list