3、linux 数据重定向和高级文件检索


一、数据重定向

将某个命令执行后应该出现在屏幕上的数据,给他传输到其他的地方,例如传输到文件。

1. 管道命令

  • 利用Linux所提供的管道符"|"将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入
  • 通过管道命令,自动登录设备并执行自动测试脚本
    #!/bin/sh
    username="hello"
    passwd="hello123"
    ip="192.168.0.112"
    
    (	
    	sleep 1;
    	echo "$username";
    	sleep 1;
    	echo "$passwd";
    	sleep 1;
    	echo "挂载命令";
    	sleep 1;
    	echo "切换到测试脚本路径命令";
    	sleep 1;
    	echo "导入相应的库文件命令";
    	sleep 1;
    	echo "执行脚本命令";
    	sleep 20;
    	echo "exit";
    )| telnet $ip
    

2. tee 命令

  • read from standard input and write to standard output and files,实现多重传送
  • eg:cat abc | tee ./hhh # 将文件内容在屏幕上显示的同时写入文件hhh

3. > 和 >> 命令

标准输入(stdin):编号为0
标准输出(stdout):编号为1 ,命令执行后,传回正确信息的输出目标
标准错误输出(stderr):编号为2 ,命令执行失败后,所传回错误信息的输出目标

1>:以覆盖的方法,将正确的数据输出到文件
1>>:以累加的方法,将正确的数据输出到文件
2>:以覆盖的方法,将错误输出的数据输出到文件
2>>:以累加的方法,将错误输出的数据输出到文件
Note:大于号后面的冒号不需要写,和tee命令的区别是:tee不只是传输到文件,还可以在屏幕上显示,实现多重传送。


二、通配符 * ? []

  • *:其所在的位置上可以匹配任意多个任意字符,可以放在任何位置,它可以帮助用户模糊匹配所需操作的文件
  • ?:其所在位置上可以匹配任意的单个字符
  • []:中括号之间可以是一个字符集,此符号表示在其所在的位置上可以匹配括号内所包含的字符集中的某一个字符。如果供选择的字符集是连续的,例如:[abcdefgh],可用连贯符号“-”作简化,将它写成[a-h];同理,十个十迚制数码组成的字符集可写为[0-9],而全体英文字母(包括大小写)组成的字符集则可写成[a-zA-Z]。
  • 使用通配符可以一次复制多个文件到指定目录,eg: cp hi* ~/document
  • 使用rm *可以一次性删除当前目录下的所有文件
  • 使用通配符的一些例子见下图:
    这里写图片描述

三、高级文件检索命令

1. 各种查找命令

因为 find 查找的速度比较慢,所以通常都是先使用 whereis 或 locate 来查找,实在找不到才用find查找。这是因为 whereis 与 locate 是利用数据库来查找数据,所以速度非常速。

使用 whereis 或 locate 前要先执行 sudo updatedb ,这是因为数据库的更新默认是每天更新一次,所以当新建文件或删除文件后去查找该文件,whereis 和 locate 会告诉你文件“not found”,所以必须先更新数据库。

  • which:查找系统命令位置

    • PATH 变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果
    • 格式:which -a command,将所有由PATH目录中可以找到的命令均列出来
  • whereis:程序名搜索

    • 只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
  • locate:利用数据库查找文件

    • 相当于 find -name,可快速查找文件
    • 格式:locate [-ir] keyword,参数 i 表示忽略大小写差异,参数 r表示后面可接正则表达式
  • find:根据文件的属性进行查找任何文件

    • 格式:find [path] [-option] [actions],path 用来指定所查找的目录路径
    • 常用检索方式选项(-option)
      • -name 按照文件名查找文件,可以使用通配符 *** 和 ?** 以实现模糊查询
        • find / -name demo,在根目录及其子目录下查找名字为demo 的文件。
        • find . -name “.java”,在当前目录及其子目录下查找任何扩展名为"java"的文件。
        • find . -iname “1_F*”,在当前目录及其子目录下查找任何以"1_F"开头的文件(加i表示不区分大小写)。
      • -type f/d: 普通文件或目录文件
      • 以上检索方式还可以通过逻辑运算进行组合,产生更复杂的检索条件
        • :将检索方式全部列出,中间用空格分开即可
        • :将检索方式全部列出,中间用 -o 分开即可
        • :在检索方式的前面加上符号 **!**即可
        • Note:当把一些检索条件组合时要使用(),但()在下有特殊含义,故要用转义符 \ 将其写为 \( 和 \)
    • 常用的执行动作
      • -print:默认选项,把查询结果在屏幕上打印出来
      • -exec command {} \;:对所有检索出来的结果执行命令command
    • 常用案例
      这里写图片描述

2. grep 命令

  • grep(global search regular expression and print out the line)
    • 根据文件的内容进行查找,会对文件的每一行按照给定的**模式(pattern)**进行匹配查找
    • 模式(pattern)中可以包含 *** 和 ? 等通配符以实现模糊查询(也称作正则表达式),它是一种强大的文本搜索工具**
  • 格式:grep [-options] pattern [filename list]
    • 常用选项
    • -n:在匹配的行前面打印行号。
    • -i:忽略大小写差别
    • eg:ll | grep -ni lib:在ls显示的内容中查找包含lib(忽略大小写)的行并添加行号。

3. history 命令

  • history:显示全部历史命令
  • history 5:显示执行过的上5条命令
  • 上下箭头:可以查看上一条命令和下一条命令
  • Ctrl + r(reverse-i-search) : 先按住Ctrl+r,然后输入命令的前几个字符,可以按住Ctrl+r进行命令查找,也可以不按Ctrl+l接着输入字符,让其实现自动智能命令补全。Note:找到命令后,按Enter键直接执行命令,按左/右键让其在命令行等待执行。
  • history -c:清空历史命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值