我获得了一组通用命令,用作我必须执行的操作的示例:
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命令在做什么?
谢谢!
答案 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