将Bash配置文件从远程系统复制到某个行号点

时间:2013-03-12 17:14:03

标签: bash shell

我想将文件从远程计算机复制到本地计算机上,直到第一行包含某种模式。

场景:使用远程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)
  • Sentinel行:比此点更进一步验证此脚本

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

您认为,这个想法最终会使这一过程自动化。克龙?你知道如何做到这一点吗?我的Bash配置文件的开头应该来自服务器,“rest”可供我自由定制。

上一次失败的尝试:

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

重要提示非常需要的是针对远程系统来浏览整个文件,而是一旦“看到”哨兵线,就截断过滤器。如果模式在300,000,000行的#300行中..只需要超过300行。

2 个答案:

答案 0 :(得分:4)

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

一旦找到该行,您可以使用sed -n '/Verify this script/q; p'代替退出:

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

或者没有useless use of cat,这在这种情况下没有显着差异,但如果您想在以后删除多个部分,则会传输更少的数据:

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

答案 1 :(得分:2)

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

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

-n标记以及pq命令一起仅打印以“验证...”开头的第一行,但不包括第一行。< / p>