管道命令(pipe)

1.把一个命令的输出作为另一个命令的输入

ls -al /etc | less

2.选取命令:cut和grep

cut命令可以将一段消息的某段切出来。

-d接分隔符,-f是取出第几段的意思,-c是以字符串为单位取出固定的字符串范围

ls -F | grep '/' -v | cut -d'.' -f 1  #在取出不是文件夹的文件后,通过分隔符‘.’来分割,取出不包括文件后缀的文件名
ls -F | grep '/' -v | cut -c 1-  #取出第一个字符(包括第一个)之后范围的字符,也可以指定范围1-5

grep命令分析一行消息,如果其中有所需要的信息,就将该行取出。

ls -F | grep '/'  #取出文件夹的名字
ls -F | grep '/' -v  #反向,取出不是文件夹的文件
ls -l | grep ^d    #只显示文件夹
ls -l | grep ^- #只显示文件

3.排序命令:sort、wc和uniq(a.txt保存的是ls -al的输出)

使用sort命令进行排序

-f:表示忽略大小写

-b:忽略最前面的空格

-M:表示以月份的名字来排序,JAN、DEC等

-n:使用“纯数字”进行排序,10在9之后,而不会在1之后(默认是以文字类型来排序)

cat 下载/a.txt | sort -t' ' -k 6 -n

-r:表示反向排序

-u:表示uniq,相同的数据中,仅出现一行表示,(如果用第k栏来排序,第k栏相同的只出现一个)

-t:是分隔符,-k:是按某个字段来进行排序

cat 下载/a.txt | sort -t' ' -k 6    #-t表示分割,-k表示用第k栏来排序

使用uniq命令来将重读的数据仅显示一次

cat 下载/a.txt | cut -d' ' -f 1,2 | sort -t' ' -k 2 -n | uniq  #取出权限和文件数,然后按文件数排序,再去重

使用wc命令来统计文件的字数、行数、字符数

-l:仅显示多少行,-w:仅显示多少字(英文单词),-m:多少字符

cat 下载/a.txt | wc  #分别显示“行数、字数、字符数”

去掉第一行的“总用量”,再统计行数

common@common-Aspire-4750:~$ cat 下载/a.txt | grep -v '总用量' | wc -l
81
common@common-Aspire-4750:~$ cat 下载/a.txt | wc -l
82

4.双向重导向:tee

  同时将数据流分送到文件和屏幕

cat 下载/a.txt | sort | tee 下载/a.txt  #把txt的内容排序后,双向重导向,不能使用>来把一个文件的内容修改后,再重导向回本身,该操作会清空这个文件

5.字符转换命令:tr、col、join、paste、expand

  tr可以用来删除一段消息中的文字,或者是进行文字消息的替换

  -d:删除一段消息中的文字,-s:替换重复的字符

cat a.txt | sed 's/[ ][ ]*/ /g'    #先把文件中连续的空格变成一个空格,方便使用字段来进行切分或者排序
cat a.txt | awk '{$1=$1;print}'  #去掉连续空格的其他方法
cat a.txt | tr -s ' '        #去掉连续空格的其他方法
cat 下载/a.txt | tr '[a-z]' '[A-Z]'    #把输出的所有小写字母替换成大写字母
cat 下载/a.txt | tr -d ' '    #删除所有的空格

  col可以用来将【tab】按键替换成为空格键,在cat -A中,【tab】会以^I来表示,【换行符】会以^M

cat regTrees.py | col -x | cat -A    #将tab键转换成对等的空格键

  join可以用来处理两个文件之间的数据

-t:join默认以空格符号分割数据,并且比较“第一个字段”的数据,如果两个文件相同,则将两个数据联成一行,且第一个字段放在第一个。

-i:忽略大小写的差异

-1:表示第一个文件要用哪个字段来分析

-2:表示第二个文件要用哪个字段来分析

比如第一个文件a.txt是

1 2 3
4 5 6

第二个文件b.txt是

1 4 5
4 7 8
common@common-Aspire-4750:~/下载$ join -t ' ' -1 1 a.txt -2 1 b.txt
1 2 3 4 5
4 5 6 7 8

  paste直接将两行贴在一起,且中间以[tab]键隔开

  -d:后面可以接分隔符,默认以[tab]来分割

  -:如果file部分写成-,表示来自标准输入的数据

common@common-Aspire-4750:~/下载$ paste a.txt b.txt
1 2 3 1 4 5
4 5 6 4 7 8
common@common-Aspire-4750:~/下载$ cat a.txt | paste a.txt b.txt - | head -n 3    #把要显示的文件和后面的输出贴在一起,且只取出前三行
1 2 3    1 4 5    1 2 3
4 5 6    4 7 8    4 5 6

  expand将【tab】按键转换成空格键

  -t:后面可以接数字,一般一个tab键可以用8个空格键来替换

  unexpand将空格键转换成【tab】

expand -1 treeExplore.py    #-t表示一个[tab]按键表示多少个字符

6.拆分命令:split

  split命令可以用来拆分文件

  -b:后接要拆分的文件大小,可加单位,例如b,k,m等

  -l:按行数进行拆分

split -b 1k a_copy.txt a_split    #拆分之后在前缀后面加上aa、ab、ac
cat a_split* >> a_back.txt    #把拆分后的文件合并
ls -al | split -l 10 - lsxiazai    #输出的信息,每10行记录成一个文件,必须要“-”符号

7.参数代换:xargs

  xargs命令可以读入stdin的数据,并且以空格符或换行符作为标示,将stdin的数据分隔成为参数,作为某个命令的参数

  -0:如果输入的stdin含有特殊字符,例如`,\,空格键等字符,这个-0可以还原成一般字符。这个参数可以用于特殊状态

  -e:这时EOF的意思。后面可以接一个字符串,当xargs分析到这个字符串的时候,就会停止继续工作

  -p:在执行每个命令的参数的时候,都会询问用户是否执行,输入y或者n

  -n:后面接次数

common@common-Aspire-4750:~$ cut -d':' -f 1 < /etc/passwd | xargs
root daemon bin sys ... common
cut -d':' -f 1 < /etc/passwd | xargs finger    #将输入的参数作为finger命令的输出,finger命令用于查找并显示用户信息
cut -d':' -f 1 < /etc/passwd | xargs -p -n 5 finger    #每次仅查看5个账号,且询问用户
cut -d':' -f 1 < /etc/passwd | xargs -p -e'games' finger    #当参数遇到games的时候,就包括后面的舍弃掉

8.减号(-)的用途

  当用到一个命令的stdout作为这次的stdin的时候,stdin和stdout可以利用“-”来替代

tar -cvf - /home | tar -xvf -    #后面的-取用前一个命令的stdout

9.通配符与特殊符号

*    #代表多个字母或者数字
? #代表一个字母或者数字
# #注释
\ #转义符号
| #分隔两个管道命令
; #连续命令的分隔
~ #用户的home目录
$ #将命令变成后台工作
! #逻辑“非”
/ #路径分隔符号
>、>> #输出导向
‘ #单引号,不具有变量置换的功能
“ #具有变量置换的功能
’ ‘ #两个‘中间为可以先执行的命令
() #中间为子shell的起始与结束
[] #中间为字符的组合
{} #中间为命令区块的组合
ctrl+C    #终止当前面命令
ctrl+D #输入结束(EOF),例如邮件结束的时候
ctrl+M #就是Enter键
ctrl+S #暂停屏幕的输出
ctrl+Q #恢复屏幕的输出
ctrl+U #在提示符下,删除整行命令
ctrl+Z #”暂停“当前的命令

10.基础正则表达式

  grep命令

  -a:在二进制文件中,以文本文件的方式搜索数据

  -c:计算找到”搜索字符串“的次数

  -i:忽略大小写

  -n:输出行号

  -v:反向选择

搜索特定字符和利用[]来搜索集合字符

grep -n 'the' regular-express.txt    #搜索特定字符串,输出行号
grep -n -i 'the' regular-express.txt #忽略大小写
grep -n 't[ae]st' regular-express.txt #利用[]来搜索集合字符
grep -n '[^g]oo' regular-express.txt #使用反向选择^来选择不是goo的oo单词

行首字符^与行尾字符$

grep -n '^[A-Z]' regular-express.txt    #行首字符^,选择行首是[A-Z]的行
grep -n '\.$' regular-express.txt #行尾字符$,选择行尾是.的行
grep -n '^[^a-zA-Z]' regular-express.txt #选取行首不是英文字符的行
grep -n '\.$' a.txt    #把以.结尾的行输出,注意window的换行是^M$,Linux的换行是$

任意一个字符(.)与重复字符(*)

grep -n 'g..d' regular-express.txt    #找到有g??d字符的行
grep -n 'o*' regular-express.txt #拥有空字符或者一个o以上的字符的行
grep -n 'oo*' regular-express.txt #拥有一个o的字符的行
grep -n 'ooo*' regular-express.txt #拥有两个o的字符的行
grep -n '[0-9][0-9]*' regular-express.txt #找到有任意数字的行

限定连续重复字符范围{},使用的时候需要使用转义字符\{\}

grep -n 'o\{2\}' regular-express.txt    #找到两个o的字符串的行
grep -n 'go\{2,5\}g' regular-express.txt #找到g后面接2~5个o,然后再接一个g的字符串的行

11.格式化显示:printf

  \n  输出新的一行

  \t  水平的tab按键

  \v  垂直的tab按键

  \xNN  NN为两位数的数字,可以转换数字为字符

printf '%s\t %s\t %s\t \n' `cat a.txt`    #``中的命令先执行,然后按格式输出,用tab分割
printf '\x45\n' #输出E

12.变量

echo $HOME    #输出环境变量
common@common-Aspire-4750:~$ myname=123 #定义变量并输出
common@common-Aspire-4750:~$ echo $myname
123 unset myname #取消变量 name=my\ name #空格等特殊字符用\或者“ ”
name="my name" common@common-Aspire-4750:~$ echo $name
my name
common@common-Aspire-4750:~$ name=$name\ 123 #累加变量
common@common-Aspire-4750:~$ echo $name
my name 123 common@common-Aspire-4750:~$ name=my\ name #通过export让子程序可以使用父程序的变量
common@common-Aspire-4750:~$ echo $name
my name
common@common-Aspire-4750:~$ bash
common@common-Aspire-4750:~$ echo $name common@common-Aspire-4750:~$ exit
exit
common@common-Aspire-4750:~$ export name
common@common-Aspire-4750:~$ bash
common@common-Aspire-4750:~$ echo $name
my name

13.变量的有效范围

变量能否被引用是与export有关的,被export后的变量,可以称之为“环境变量”,环境变量可以被子程序所引用,但是其他的自定义变量就不会存在于子程序中。

在scripts2.sh会去引用scripts1.sh中的变量,那么scripts1.sh就应该设置export

14.变量键盘读取、数组与申明:read、array、declare

  1、read,用来读取来自键盘输入的变量

  -p:后面可以接提示符

  -t:后面可以接等待的秒数,不会一直等待用户

common@common-Aspire-4750:~$ read -p "请输入name:" -t 30 name    #提示符和等待
请输入name:my name
common@common-Aspire-4750:~$ echo $name
my name

  2、declare和typeset,用来申明变量的属性

  -a:申明数组(array)

  -i:申明整数数字(integer)

  -x:和export一样,申明环境变量

  -r:将一个变量申明为只读,不可更改内容,也不能unset

common@common-Aspire-4750:~$ sum=100+300
common@common-Aspire-4750:~$ echo $sum
100+300
common@common-Aspire-4750:~$ declare -i sum=100+300 #申明为整数才能求和
common@common-Aspire-4750:~$ echo $sum
400

  3.数组属性array

common@common-Aspire-4750:~$ name[1]=123
common@common-Aspire-4750:~$ name[2]=456
common@common-Aspire-4750:~$ name[3]=789
common@common-Aspire-4750:~$ echo ${name[1]}  #使用$()来读取
123

Linux学习笔记<五>——<Shell部分>的更多相关文章

  1. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  2. linux学习笔记2-linux的常用命令

    第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...

  3. Linux学习笔记(一)2015.4.13

    研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...

  4. 20160127 linux 学习笔记

    Linux学习笔记第一天 Linux基本介绍 Linux的起源和发展: 简单说linux是一种操作系统,可以安装在包括服务器.个人电脑,乃至PDA.手机.打印机等各类设备中. 起源: Linux起源于 ...

  5. linux —— 学习笔记(汇总)

    笔记目录:一.系统知识 和 基本概念                    二.常用操作                   三.系统管理(内存.设备.服务等管理)                   ...

  6. Linux学习笔记-林耐斯Notes-Linux就该这么学

    Linux学习笔记... 参考的优秀Linux网站: http://www.w3cschool.cn/linux/ http://www.linuxeye.com/ http://linux.vbir ...

  7. Linux~学习笔记目录索引

    回到占占推荐博客索引 本篇文章是对自己学习Linux及在它的环境下部署工具的一个总结,以方便自己查阅,也给他人一个帮助,本文章同时会不断的更新,欢迎大家订阅! 本目录包括的内容会包括linux基础命令 ...

  8. deepin linux学习笔记(四)进不去图形界面怎么办?

    目录 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 更换成lxde桌面 进不去图形界面怎么办? 总结 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 生命不息 ...

  9. deepin linux 学习笔记(二)——文本编辑器

    目录 deepin linux 学习笔记(二)--文本编辑器 前言 nano 小巧的命令行编辑器 通用 编辑 定位 排版 配置 vim 思路独特的超级编辑器 命令模式 插入模式 底线模式(末行模式) ...

  10. deepin linux学习笔记

    目录 deepin linux学习笔记 前言 linux常用命令 ls 显示文件夹内容 cd 切换当前目录 pwd 查看当前工作目录 mkdir 新建文件夹 rm 删除文件或文件夹 mv 移动文件 c ...

随机推荐

  1. idea 提示忽略大小写

  2. zoj 月赛B题(快速判断一个大数是否为素数)

    给出一个64位的大数,如何快速判断其是否为素数 #include<algorithm> #include<cstdio> #include<cstring> #in ...

  3. 基于jQuery仿QQ音乐播放器网页版代码

    基于jQuery仿QQ音乐播放器网页版代码是一款黑色样式风格的网页QQ音乐播放器样式代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="m ...

  4. Python os.popen() 方法

    简述 就是新建一个管道执行一个命令. 方法是os.popen(命令,权限,缓冲大小) 比如 a = 'mkdir def' b = os.popen(a,) print b 就是等同于使用命令去创建了 ...

  5. [转]JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别

    关于获取类的字段有两种方式:getFields()和getDeclaredFields().我们先来看看这两者的区别吧: getFields():获得某个类的所有的公共(public)的字段,包括父类 ...

  6. thinkphp前台模版字符串截取

    ThinkPHP\Common\extend.php 中管理前台模版的截取{$vons.title|msubstr=0,26} 原始的代码是无法使用截取支持…. 由于涉及到只有汉字检测最为准确 需要加 ...

  7. MySQL的MVCC

    基本概念 Multi-Version Concurrency Control 多版本并发控制,MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问:在编程语言中实现事务内存. ...

  8. C语言 · 征税程序

    算法提高 征税程序   时间限制:1.0s   内存限制:512.0MB      问题描述 税务局希望你帮他们编写一个征税程序,该程序的功能是:首先输入某公司的年销售额sale和税率rate,然后程 ...

  9. [4G]4G模块的热重启

    最近在调试4G模块,发现在开机启动时执行的AT指令会概率性的出现返回杂乱字符串的问题.想尽了各种办法还是行不通,在系统中使用minicom敲AT指令就不会有问题,开始怀疑是串口初始化的问题,修改了很多 ...

  10. 使用jquery将表单元素转json提交后台

    今天帮朋友解决一个问题,朋友的框架用的layui的,发现layui的里面的data.field不能获取动态生成的标签的值的. 于是使用jquery的方法如下: var formObject = {}; ...