我得到了一组通用命令,用作我必须执行的示例:
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
这到底是做什么的?
我知道 machines.list 的内容正在传递给 sed,但 sed 命令在做什么?
谢谢!
最佳答案
我会解释cat/etc/dsh/machines.list | sed -e "s|\(.*\)|cp run.sh\1/|"
给你,其余的都是一样的。
1) cat
将从 machines.list
中读取行并将其传递给 sed。
2) sed 基本上是在执行匹配和替换
操作。
|
作为分隔符,可以是任意字符,一般为/
。它基本上是这样工作的 |match this|replace with this|
。
您正在匹配 \(.*\)
这基本上是告诉 sed 匹配所有内容。
.
匹配每个字符,*
表示匹配该字符任意次数。
使用 ()
会将匹配项保存在 \1
中。
在替换部分,您将用文本 cp run.sh\1/
替换它,\1
将包含匹配的任何内容。
此外,我确实认为根本不需要使用 cat
。最好这样使用 sed -e "s|\(.*\)|cp run.sh\1/|"/etc/dsh/machines.list
关于linux - 这个命令在做什么? sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30743293/