我想将文件从远程计算机复制到本地计算机上,直到第一行包含某种模式。
场景:使用远程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
我可以使用基本的shell脚本,最好是在Bash中,因为它是默认的,或者是最常见的diff / source-control bin。
您认为,这个想法最终会使这一过程自动化。克龙?你知道如何做到这一点吗?我的Bash配置文件的开头应该来自服务器,“rest”可供我自由定制。
上一次失败的尝试:
head
<( ... )
grep
重要提示:非常需要的是针对远程系统不来浏览整个文件,而是一旦“看到”哨兵线,就截断过滤器。如果模式在300,000,000行的#300行中..只需要超过300行。
答案 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
标记以及p
和q
命令一起仅打印以“验证...”开头的第一行,但不包括第一行。< / p>