0

我想将文件从远程机器复制到我的本地机器上,直到包含特定模式的第一行。

场景:使用远程 Bash 配置文件的一部分更新我的本地 Bash 配置文件,直到我的管理员验证它为止。

有没有比这个快速的“shell 脚本”破解更好的方法(我想可能有!)?

ssh tinosino@robottinosino-wifi cat /Users/tinosino/.profile | sed '/Verify this script further than this point/,$ d' > /home/tinosino/Desktop/tinosino_bash_profile.sh
  • 远程机器:robottinosino-wifi (OSX)
  • 哨兵线:验证此脚本比此点更远

我可以使用基本的 shell 脚本,最好是在 Bash 中,因为它是默认的,或者是最常见的 diff/source-control bins..

你猜对了,这个想法最终是自动化这个过程。克朗?关于你将如何做到这一点的任何想法?我的 Bash 配置文件的开始应该来自服务器,“其余部分”是我可以自由定制的。

我的上一个失败的尝试:

  • 使用head
  • 使用过程替代<( ... )
  • 使用grep
  • 使用本地命名管道(这很有趣:命名管道需要一个程序来生成它的文本,执行类似于上面的 cat->sed 行)

重要提示:远程系统最好不要遍历整个文件,而是在“看到”哨兵行时截断过滤器。如果模式在第 300 行,即 1,000,000,000 行。 300 行。

4

2 回答 2

4

问题是您的 sed 命令的结构是读取整个文件。

sed -n '/Verify this script/q; p'找到该行后,您可以使用to 来退出:

ssh tinosino@robottinosino-wifi cat /Users/tinosino/.profile | sed -n '/Verify this script/q; p' > /home/tinosino/Desktop/tinosino_bash_profile.sh

或者不使用 cat,这在这种情况下不会产生显着差异,但是如果您以后想删除多个部分,它将传输更少的数据:

ssh tinosino@robottinosino-wifi "sed -n '/Verify this script/q; p' /Users/tinosino/.profile" > /home/tinosino/Desktop/tinosino_bash_profile.sh
于 2013-03-12T17:40:41.920 回答
2

只需在远程服务器上执行过滤。

ssh tinosino@robottinosino-wifi sed -n 'p;/Verify.../q' /Users/tinosino/.profile \
  >>/home/tinosino/Desktop/tinosino_bash_profile.sh

-nflag 和pandq命令一起只打印直到但不包括以“Verify...”开头的第一行的行。

于 2013-03-12T17:41:07.020 回答