sed 笔记

sed 简介

sed(stream editor)是一个流编辑器,一次处理流的一行内容。

sed 命令模式
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

常用options

  • -n 取消默认输出,只有经过sed特殊处理行(或者动作)才会被列出来。
  • -e 多重编辑模式。在命令行中同时指定多个操作指令时才需要用到。
  • -f 指定sed脚本文件名。
  • -i 直接修改文件内容。

sed 不会直接修改原文件,要直接修改原文件有2种方式:
1. 使用 -i 选项;
2. 使用重定向,重定向的目标文件不能与输入文件相同。

sed 的处理流程

每条操作指令由pattern和procedure两部分组成,pattern一般是用 ‘/’ 分隔的正则表达式(在sed中也可能是行号),procedure则是一连串的编辑命令。

sed的处理流程简化为:
1. 读入新的一行内容到缓存空间;
2. 从指定的操作命令中取出第一条指令,判断是否匹配pattern;
3. 如果不匹配,则忽略后续的编辑命令,回到第2步继续取出下一条指令;
4. 如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;
5. 当所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;
6. 当所有行都处理完成之后,结束。

从流程上可以看出,前一个命令的执行结果影响后一个命令的执行,命令按先后顺序执行。

继续阅读

scp 文件传输

scp

scp是Security copy,基于ssh协议登录,用于在两台主机之间加密拷贝文件或目录,既可以从本机拷贝到远程主机,也可以从远程主机拷贝到本机。


root@coderbee:~# scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2

参数说明:

  • -1 强制scp命令使用ssh1协议。
  • -2 强制scp命令使用ssh2协议。
  • -4 强制scp命令只使用IPv4寻址。
  • -6 强制scp命令只使用IPv6寻址。
  • -B 使用批处理模式(传输过程中不询问传输口令或短语)。
  • -C 允许压缩。(将-C标志传给ssh,从而使用压缩传输)
  • -p 保留原文件的修改时间、访问时间和访问权限。
  • -q 不显示传输进度。
  • -r 递归复制整个目录。
  • -v 详细方式显示输出。scp和ssh(1)会显示整个过程的调试信息。用于调试连接、验证和配置问题。
  • -c cipher 以 cipher对数据传输进行加密,这个选项将直接传递给ssh。
  • -F ssh_config 指定一个ssh配置文件,此参数直接传递给ssh。
  • -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
  • -l limit 限制用户所能使用带宽,以k bit/s为单位。
  • -o ssh_config
  • -P port 大写P,port是传输数据使用的端口号。
  • -S program 指定加密传输时所使用程序,此程序必须能够理解ssh(1)的选项。
  • [[user@]host1:]file1 … 源文件或目录
  • [[user@]host2:]file2 目的文件或目录

选项参数说明来自:http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792179.html

scp的基本使用形式: scp [-r] 源文件或目录 目的文件或目录-r选项用于拷贝目录。

在本机上的文件或目录是不需要指定用户名和host的。远程主机可以不指定用户名,在命令执行后会要求输入用户名和密码。主机与路径之间是用冒号:分隔的。

对于拷贝遵循:

  • 拷贝文件时,如果目的路径是个目录,则拷贝到目的目录下,文件名不变;如果目的路径是个文件,则拷贝到以此路径指向的文件里,也就是说可以通过指定不同的文件名来直接重命名。
  • 如果是拷贝目录,则目的路径必须是个目录,且必须使用 -r 选项。

举例:

  • 从远程主机拷贝文件到本地目录: scp coderbee@coderbee.net:/home/coderbee/soft/setup.sh .
  • 从本地拷贝文件到远程主机并重命名: scp my.txt coderbee@coderbee.net:/home/coderbee/soft/mytxt
  • 拷贝本地目录到远程主机目录: scp -r basic coderbee@coderbee.net:/home/coderbee/soft/

欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。