Linux学习笔记<五>
管道命令(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学习笔记<五>的更多相关文章
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
- linux学习笔记2-linux的常用命令
第一篇博客:linux学习笔记1-ubuntu的安装与基本设置 之中,已经介绍了如何安装linux操作系统,以及一些基本的设置修改. 本篇博客主要介绍linux中的一些常用的终端命令 ======== ...
- Linux学习笔记(一)2015.4.13
研究生由单片机转Linux学习 首先安装VMware虚拟机,用的是VMware 10.0 在VMware 10.0上安装视频上推荐的Red Hat Linux 5 安装后正式进入Linux学习 笔记1 ...
- 20160127 linux 学习笔记
Linux学习笔记第一天 Linux基本介绍 Linux的起源和发展: 简单说linux是一种操作系统,可以安装在包括服务器.个人电脑,乃至PDA.手机.打印机等各类设备中. 起源: Linux起源于 ...
- linux —— 学习笔记(汇总)
笔记目录:一.系统知识 和 基本概念 二.常用操作 三.系统管理(内存.设备.服务等管理) ...
- Linux学习笔记-林耐斯Notes-Linux就该这么学
Linux学习笔记... 参考的优秀Linux网站: http://www.w3cschool.cn/linux/ http://www.linuxeye.com/ http://linux.vbir ...
- Linux~学习笔记目录索引
回到占占推荐博客索引 本篇文章是对自己学习Linux及在它的环境下部署工具的一个总结,以方便自己查阅,也给他人一个帮助,本文章同时会不断的更新,欢迎大家订阅! 本目录包括的内容会包括linux基础命令 ...
- deepin linux学习笔记(四)进不去图形界面怎么办?
目录 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 更换成lxde桌面 进不去图形界面怎么办? 总结 deepin linux学习笔记(四)进不去图形界面怎么办? 前言 生命不息 ...
- deepin linux 学习笔记(二)——文本编辑器
目录 deepin linux 学习笔记(二)--文本编辑器 前言 nano 小巧的命令行编辑器 通用 编辑 定位 排版 配置 vim 思路独特的超级编辑器 命令模式 插入模式 底线模式(末行模式) ...
- deepin linux学习笔记
目录 deepin linux学习笔记 前言 linux常用命令 ls 显示文件夹内容 cd 切换当前目录 pwd 查看当前工作目录 mkdir 新建文件夹 rm 删除文件或文件夹 mv 移动文件 c ...
随机推荐
- Tomcat配置内存和远程debug端口
一.配置内存 在/tomcat/bin/catalina.sh 中添加: JAVA_OPTS='-server -Xms2048m -Xmx2048m -XX:NewSize=768m -XX:Max ...
- 让OData和NHibernate结合进行动态查询
OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了.http://www.odata.org/ OData的特点就是可以根据传入参数动态生成Ent ...
- 《Ansible权威指南》笔记(3)——Ad-Hoc命令集,常用模块
五.Ad-Hoc命令集1.Ad-Hoc命令集通过/usr/bin/ansible命令实现:ansible <host-pattern> [options] -v,--verbose ...
- 【码在江湖】前端少侠的json故事(上)日月第一击
日月第一击 这是我前端生涯第一次和后台对接,其经历真是苦不堪言,多次绝处逢生,柳暗花明,可就是迟迟见不到那条村子.当然,最后我还是完成了这次对接.下面来聊一聊我这白痴一般的经历. 序章 话说天下大势, ...
- SQL必知必会1-13 读书笔记
博主不想写字并向你仍来了一堆代码 1-6 SQL——结构化查询语言,Structured Query Language: 基本按列查询: mysql> SELECT prod_id,prod_n ...
- 前端编辑工具之VSCode
因为前段时间看了瞬息之间的一篇文章编辑器背后的程序观, 里面只提到了Visual studio. 我想想可能是因为非.Net开发者,所以不知道Visual sutdio code这个工具.来看看V ...
- POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37427 Accepted: 16288 Descr ...
- 【译】什么是 web 框架?
Web 应用框架,或者简单的说是“Web 框架”,其实是建立 web 应用的一种方式.从简单的博客系统到复杂的富 AJAX 应用,web 上每个页面都是通过写代码来生成的.我发现很多人都热衷于学习 w ...
- web前端(实习生)之 “百度一面”
2016.3.18,星期五.我经历了我的第一次面试. 不得不说,百度是一个高效的公司,在短短一下午之间我就直接经历了一面二面,说没有压力是假的,还记得在中途等待二面的时候我至少有一小段的时间脑子是卡带 ...
- java.lang.OutOfMemoryError: PermGen space及其解决方法
PermGen space的全称是Permanent Generation space,是指内存的永久保存区域OutOfMemoryError: PermGen space从表面上看就是内存益出,解决 ...