linux - 这个命令在做什么? sed

标签 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

这到底是做什么的?

我知道 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/

相关文章:

linux - 尝试将正则表达式传递给 grep

windows - $LastExitCode=0,但 $?=False 在 PowerShell 中。将 stderr 重定向到 stdout 会给出 NativeCommandError

ruby - 获取登录用户列表

java - 将输入发送到标准输入并在 Java 中获得完整输出 - Festival TTS

linux - 基于 *.deb 文件创建 *.rpm 文件

linux - 在 shell 脚本中使用方括号/圆括号与在命令行 bash 中使用它们

linux - copy_to_user 在哪里定义

linux - 删除大量文件

linux - 如果在命令行上输入参数,不想玩函数

linux - 从 shell 启动程序时是否可以分配窗口 ID?