目录

  • 一、shell简单命令
    • 1.1命令入门
      • 1.1.1命令提示符详解
      • 1.1.2命令格式
    • 1.2 获取命令的帮助
      • 1.2.1 help
      • 1.2.2 命令 --help
      • 1.2.3 查手册&搜索引擎
    • 1.3 man
      • 1.3.1 man安装
      • 1.3.2 man的使用
    • 1.4 常见命令
      • 1.4.0 whereis 、ps、管道
      • 1.4.1 echo
      • 1.4.2 test命令
      • 1.4.3 环境变量:PATH
      • 1.4.4 type和file
      • 1.4.5 其他简单命令
  • 二、文件系统命令、系统操作命令、文本操作命令
    • 2.1 文件系统命令
    • 2.2 系统操作命令
    • 2.3 文本操作命令
  • 三、文本处理
    • 3.0 linux中的正则表达式
      • 3.0.1 匹配符:
      • 3.0.2 重复操作符:
    • 3.1 cut:显示切割的行数据
    • 3.2 sort:排序文件的行
    • 3.3 wc:统计文本信息(行数,单词个数,字符个数)
    • 3.4 sed:行编辑器sed [options] 'AddressCommand' file ...
      • AddressCommand
    • 3.5 awk:强大的文本分析工具
      • 3.5.1 -F 自定义分隔符
      • 3.5.2 支持函数
      • 3.5.3 支持流程控制语句,类C语言
      • 3.5.4 举例

一、shell简单命令

1.1命令入门

1.1.1命令提示符详解

[root@localhost ~]# /root
[jinxf@localhost ~]$ /home/jinxf
用户名@主机名 当前目录 #系统权限 $普通权限

1.1.2命令格式

 命令          选项        参数 (三者之间要有空格,区分大小写)
command      [-options]  [args]
[args]:参数(多个参数之间用空格分隔)案例演示
[root@node1 ~]# ls -a

1.2 获取命令的帮助

1、使用help查看内建命令的帮助(enable查看内建命令)
2、info 命令
3、!!! 命令 --help
4、!!!#man 命令
5、!!!查手册
6、搜索引擎

1.2.1 help

[root@node1 ~]# help -s cd
cd: cd [-L|-P] [dir]
[root@node1 ~]# help -d cd
cd - Change the shell working directory.
[root@node1 ~]# help -m cd
NAMEcd - Change the shell working directory.SYNOPSIScd [-L|-P] [dir]DESCRIPTIONChange the shell working directory.Change the current directory to DIR.  The default DIR is the value of the
HOME shell variable.

但是help只能查看内建命令,比如我想查看mv的帮助信息就不行

[root@node1 ~]# help mv
bash: help: no help topics match `mv'.  Try `help help' or `man -k mv' or `info mv'.

那么我们怎么知道哪些是内建命令呢?

[root@node1 ~]# enableenable也不用背,该方式比较费时间,help无法使用时,根据提示换其他帮助方式就ok了。

1.2.2 命令 --help

[root@node1 ~]# mv --help

1.2.3 查手册&搜索引擎

手册见《参考手册&资料》
搜索:必应 www.bing.com
谷歌/百度等

1.3 man

1.3.1 man安装

当前虚拟机中不能直接使用man,默认是没有安装的,不识别man命令。
[root@node2 ~]# man ls
-bash: man: command not found
所以需要安装,安装man和man-pages手册,查看命令的帮助信息
[root@node1 ~]# yum install man man-pages -y[root@node1 ~]# man lsq退出命令查看
看到的全是英文,是不是很酸爽,慢慢多看看就好了。如果你英语烂到完全看不懂,那我再教你一招,汉化man提示信息。
要想汉化man提示信息,系统中需要安装man-pages-zh-CN软件包。默认情况下,系统自带的yum源不包含man-pages-zh-CN。
[root@node2 ~]# yum search man-pages-zh-CN
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile* base: mirrors.huaweicloud.com* extras: mirror.bit.edu.cn* updates: mirror.bit.edu.cn
Warning: No matches found for: man-pages-zh-CN
No Matches found
默认的源存放目录:
[root@node2 ~]# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo  CentOS-Vault.repo
所以下载后的第三方yum源epel也保存到该目录下,使用yum命令时会去该目录下解析后缀名为repo的文件。
[root@node1 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
-bash: wget: command not found
wget不能使用,需要先安装,安装wget,否则无法通过该命令进行下载。
[root@node1 ~]# yum install wget -y
然后将epel的源放到本地,然后清除yum本地缓存,重新生成缓存。
[root@node1 ~]#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
[root@node1 ~]# yum clean all
[root@node1 ~]#yum  makecache
[root@node1 ~]# yum  install  man-pages-zh-CN  -y是不是可以使用了呢,相信你已经迫不及待的想要测试一把了。
[root@node1 ~]# man ls发现还是英文,怎么回事?
这是因为虽然你安装了man的中文包,但是系统的语言还是英文环境,
[root@node1 ~]# echo $LANG
en_US.UTF-8
所以需要修改系统的语言环境。
[root@node1 ~]# LANG=zh_CN.UTF-8
[root@node1 ~]# echo $LANG
zh_CN.UTF-8然后再次测试便有中文信息了。但是这样修改这有效到断开连接,或者下次重启系统。如何才能长期有效呢?[root@node1 ~]# vim /etc/sysconfig/i18n

1.3.2 man的使用

enter向下一行
空格按页向下翻   b向上翻页
p直接翻到首页
查找按 /要查找的内容,查找 下一个/上一个:按n/N;
退出按qman
-1用户命令(/bin,/usr/bin,/usr/local/bin)
-2系统调用
-3库函数
-4特殊文件(设备文件)
-5文件格式(配置文件的语法)
-6游戏
-7杂项(Miscellaneous)
-8管理命令(/sbin,/usr/sbin,/usr/local/sbin)指定查看某种帮助:[root@node1 ~]# man 2 read[root@node1 ~]# man read

1.4 常见命令

1.4.0 whereis 、ps、管道

whereis : 定位命令位置
ps -fe 进程列表 cat b.txt  |  head -3| tail -1 shell读取用户输入的字符串
发现 |,代表有管道,| 左右被理解为简单命令加工:
前一个(左边)简单命令的标准输出指向后一个(右边)简单命令的标准输入注意:后一个简单命令一定能够接受标准输入xargs:
1,在标准输入中读取到的内容!
2,自己的参数理解为一个字符串模仿shell,做blank切分,第一个子字符串为命令
3,将步骤1的内容做为步骤2的命令的选项参数拼接起来
4,执行得到的结果echo "/" |xargs ls -l

1.4.1 echo

[root@node1 ~]# help echoecho  -n表示不要另起新行
[root@node1 ~]# echo "hello world"
hello world
[root@node1 ~]# echo -n "hello world"
hello world[root@node1 ~]#-e表示解释逃逸字符
[root@node1 ~]# echo -e "hello \nworld"
hello
world
[root@node1 ~]# echo  "hello \nworld"
hello \nworld

1.4.2 test命令

计算3 > 2的结果,打印返回值,计算3 < 2的结果,打印返回值。
echo $? 打印上一行命令的执行结果

[root@node1 ~]# test 3 -gt 2
[root@node1 ~]# echo $?
0
[root@node1 ~]# test 3 -lt 2
[root@node1 ~]# echo $?
1
[root@node1 ~]# test 5 -lt 2
[root@node1 ~]# echo $?
1
成立返回0(true),不成立返回1(false)
[root@node1 ~]# [ 3 -gt 2 ]
[root@node1 ~]# echo $?
0
[root@node1 ~]# [ 5 -lt 2 ]
[root@node1 ~]# echo $?
1
[root@node1 ~]# [ 5 -lt 2]
-bash: [: missing `]'
[root@node1 ~]# [5 -lt 2 ]
-bash: [5: command not found
[]和内容之间一定要有空格,否则抛错。

1.4.3 环境变量:PATH

当在shell中执行命令的时候,默认到PATH指定的路径中查找可执行文件。
如果在PATH中的多个目录都包含该可执行文件,则执行最先找到的。

[root@node1 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

如果找不到,这提示命令不识别。

1.4.4 type和file

type命令:外部命令和内部命令
type打印一个字符串的类型,可能的值为:别名,内置命令,函数,关键字,可执行文件或者什么都不输出(不是前面的类型)。

操作系统:kernel内核+shell壳
查看cd命令的类型:

[root@node1 ~]# type cd
cd is a shell builtin
cd是一个builtin命令,也就是bash内置的命令。查看yum命令的类型:
[root@node1 ~]# type yum
yum is /usr/bin/yum
yum是外部命令file命令:检查文件的类型。
[root@node1 ~]# file /usr/bin/yum
/usr/bin/yum: a /usr/bin/python script text executable
yum命令是外部命令,它的文件是python脚本类型文件。
[root@node1 ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
ls是二进制可执行文件(ELF)。

1.4.5 其他简单命令

ls
ls命令用于列出目录内容
ls
添加-l以长格式输出,列出根目录下内容的详细列表
ls -l
也可以后面跟多个目录,列出多个目录的内容
ls / /usr
也可以通过命令的别名列出详细列表
ll
ls -a
ls -a -l
ls -alpwd
打印当前工作目录路径cd
cd用于更改shell工作目录,也就是切换目录  change directory  cd
cd /etc
如果cd后什么都不写,表示直接回当前用户家目录
cd
cd /etc
cd后跟波浪线,也表示回用户家目录
cd ~
cd后也可以跟减号(-)用以表示回到最后一次切换之前的目录,多次使用减号在最近两个目录之间切换
cd /etc/sysconfig/network-scritps
cd -
root用户可以直接通过绝对路径进到普通用户的家目录
cd /home/god
cd ..
ll
也可以直接跟波浪线用户名表示直接进入到某个用户的家目录
cd ~bjsxt 到用户bjsxt家中去,root不受限制ps
可以通过命令查看系统内进程信息
ps -ef
查看磁盘使用情况进程查看命令
ps(process status) :将某个时间点的程序运作情况截取下来
选项和参数
-a :和输入终端(terminal) 关联的所有 process,通常与x一起使用,
列出完整信息。
-x :后台进程,通常与 a 这个参数一起使用,可列出较完整信息
-u :有效使用者 (effective user) 相关的 process  常用组合
ps aux 观察系统所有的程序数据 (常用)[root@node1 /]# ps aux[root@node1 /]# ps au•以下为各选项的含义
USER:该 process 属于那个使用者
PID :该 process 的程序标识符。
%CPU:该 process 使用掉的 CPU 资源百分比;
%MEM:该 process 所占用的物理内存百分比;
VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
RSS :该 process 占用的物理的内存量 (Kbytes)
TTY :该 process 是在那个终端机上面运作,若与终端机无关则显示 ?, 另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
STAT:该进程目前的状态,状态显示与ps -l 的 S 旗标相同 (R/S/D/T/Z)
START:该 process 被触发启动的时间;
TIME :该 process 实际使用 CPU 运作的时间。
COMMAND:该程序的实际命令为何?  进入到/usr目录;usr不是用户的意思,而是unix software resources的简写
cd /usr
查看内容
ll
mkdir
mkdir用于创建目录
mkdir abc
mkdir  a1  a2  a3
如果直接创建多层目录,则报错,因为默认只能创建最后一级目录
mkdir a/b/c
可以添加-p选项,用以创建多层目录,因为系统发现某一级目录不存在的时候创建父目录
mkdir -p a/b/c
也可以在mkdir后跟多个目录,用于一次性创建多个目录
mkdir  ./abc/1dir  ./abc/2dir  ./abc/3dir
但是可以使用大括号高效创建相似的目录
mkdir ./abc/{x,y,z}dir
Mkdir ./abc/{x..z}dir
rm
rm用于删除文件
直接删除,需要确认yes
rm file
[root@node1 abc]# ll
total 24
drwxr-xr-x 2 root root 4096 Nov 27 10:17 1dir
-rw-r--r-- 1 root root    0 Nov 27 10:18 1.log
drwxr-xr-x 2 root root 4096 Nov 27 10:17 2dir
drwxr-xr-x 2 root root 4096 Nov 27 10:17 3dir
drwxr-xr-x 2 root root 4096 Nov 27 10:18 xdir
drwxr-xr-x 2 root root 4096 Nov 27 10:18 ydir
drwxr-xr-x 2 root root 4096 Nov 27 10:18 zdir
[root@node1 abc]# rm 1.log
rm: remove regular empty file `1.log'? y
[root@node1 abc]# ll
total 24
drwxr-xr-x 2 root root 4096 Nov 27 10:17 1dir
drwxr-xr-x 2 root root 4096 Nov 27 10:17 2dir
drwxr-xr-x 2 root root 4096 Nov 27 10:17 3dir
drwxr-xr-x 2 root root 4096 Nov 27 10:18 xdir
drwxr-xr-x 2 root root 4096 Nov 27 10:18 ydir
drwxr-xr-x 2 root root 4096 Nov 27 10:18 zdir添加-f选项可以不用确认强制删除
rm -f file
如果rm的参数是目录,则会提示需要迭代删除而不能成功
rm adir
[root@node1 abc]# touch 2.log
[root@node1 abc]# rm -f 2.log
[root@node1 abc]# rm -f 1dir
rm: cannot remove `1dir': Is a directory
此时可以添加-r参数表示迭代删除
rm -r dira
也可以使用-rf选项,迭代强制删除某个文件或目录,此命令慎用。
rm -rf dira
尤其是
!!!!   rm -rf /
cp
•cp拷贝
cp  文件…    目标目录     拷贝文件…到目标目录,可以同时拷贝多个文件,文件名之间用空格隔开
[root@node1 ~]# cp install.log anaconda-ks.cfg  abc/
[root@node1 ~]# ls abc/
1dir  2dir  3dir  anaconda-ks.cfg  install.log  xdir  ydir  zdir
[root@node1 ~]# cd abc/xdir/
[root@node1 xdir]# cp /root/install.log /root/abc/xdir/   太啰嗦
[root@node1 xdir]# cp ~/install.log .
cp: overwrite `./install.log'? y
[root@node1 xdir]#cp  -r  目录   目标目录
[root@node1 ~]# mkdir xyz
[root@node1 ~]# ls
a  abc  anaconda-ks.cfg  install.log  install.log.syslog  xyz
[root@node1 ~]# cp abc/ xyz/
cp: omitting directory `abc/'
[root@node1 ~]# cp -r abc/ xyz
[root@node1 ~]# ls -R xyz/
xyz/:
abc
xyz/abc:
1dir  2dir  3dir  anaconda-ks.cfg  install.log  xdir  ydir  zdir
xyz/abc/1dir:
xyz/abc/2dir:
xyz/abc/3dir:
xyz/abc/xdir:
install.log
xyz/abc/ydir:
xyz/abc/zdir:mv
mv用于移动或重命名文件
•移动文件/目录 #mv 源文件/[源文件1  源文件2]  目标
[root@node1 ~]# cd abc
[root@node1 abc]# mkdir -p x/y/z
[root@node1 abc]# mv install.log anaconda-ks.cfg x/y
[root@node1 abc]# ls x/y
anaconda-ks.cfg  install.log  z
[root@node1 abc]# mv x /root
[root@node1 abc]# ls -R /root/x
/root/x:
y
/root/x/y:
anaconda-ks.cfg  install.log  z
/root/x/y/z:
[root@node1 abc]#
•Linux中没有专门改名的命令,兼职改名工作:
[root@node1 abc]# ls
1dir  2dir  3dir  xdir  ydir  zdir
[root@node1 abc]# mv zdir zzdir
[root@node1 abc]# ls
1dir  2dir  3dir  xdir  ydir  zzdir
[root@node1 abc]#

二、文件系统命令、系统操作命令、文本操作命令

2.1 文件系统命令

虚拟目录树!!!df
查看系统挂载的磁盘情况
df
以人能看懂的格式显示
df -h列出根目录下的内容
ls /
进到boot目录
cd /boot
在linux中用到了虚拟目录树
它的存在就是为了解耦应用和底层存储
mount
将光驱挂载到/mnt目录:
mount /dev/cdrom /mnt
进入到/mnt目录
cd /mnt
查看磁盘分区的挂载情况:
df -h
umount
卸载掉挂载的分区/mnt
umount /mnt
注意卸载/mnt时,当前目录不能在/mnt下面,否则报出如下图所示提示:再次查看磁盘分区的挂载情况:
df -h
重新挂载
mount /dev/cdrom /mnt如果没有挂载,则访问父目录的文件夹
再次查看
df -h虚拟目录树的各个目录用途
目录  用途
/   虚拟目录的根目录。通常不会在这里存储文件
/bin    二进制目录,存放许多用户级的GNU工具
/boot   启动目录,存放启动文件
/dev    设备目录,Linux在这里创建设备节点
/etc    系统配置文件目录
/home   主目录,Linux在这里创建用户目录
/lib    库目录,存放系统和应用程序的库文件
/media  媒体目录,可移动媒体设备的常用挂载点
/mnt    挂载目录,另一个可移动媒体设备的常用挂载点
/opt    可选目录,常用于存放第三方软件包和数据文件
/proc   进程目录,存放现有硬件及当前继承的相关信息
/root   root用户的主目录
/sbin   系统二进制目录,存放许多GNU管理员级工具
/srv    服务目录,存放本地服务的相关文件
/sys    系统目录,存放系统硬件信息的相关文件
/tmp    临时目录,可以在该目录中创建和删除临时工作文件
/usr    大量用户级的GNU工具和数据文件都存储在这里
/var    可变目录,用以存放经常变化的文件,比如日志文件文件元数据

2.2 系统操作命令

du !!!
du可以为目录递归地汇总每个FILE的磁盘使用情况。
•du:文件系统的磁盘使用量或是目录使用量
ᅳa :列出所有的文件与目录容量
ᅳh :以人们较易读的容量格式(G/M)显示   重要
ᅳs :列出总量而已,而不列出每个各别的目录占用容量
ᅳk :以 KBytes 列出容量显示
ᅳm :以 MBytes 列出容量显示 cd /usr
du
添加-s参数可以生成指定目录的汇总信息,也就是共占用多大的磁盘空间
du -s ./
添加-h参数可以显示为人类可以读懂的格式
du -sh ./
将路径写成./*统计当前目录下每项内容占用的磁盘空间信息
du -sh ./*查看/usr/local目录下共占用多大磁盘空间
[root@node1 usr]# du -sh /usr/local
132K    /usr/localstat!
显示文件的元数据
stat    /etc/profile
change和modify的不同
modify指的是文件内容被修改的时间???
change表示文件元数据被修改的时间touch!!
touch 已存在的文件,抹平各个时间
touch 不存在的文件,则创建文件

2.3 文本操作命令

直接查看一个文件的内容可以使用cat,tac,nl这几个指令
cat(concatenate):cat是concatenate的缩写,其功能时间一个文件的内容连续的输出。该命令适合看行数较少的文件。另外,需要查看一般DOS文件时,可以通过-A选项来显示换行符和[tab]。tac(反向输出):
与上面的cat命令进行比较,是由最后一行先显示。
tac功能与cat类似,但是是由文件最后一行反向连续输出到屏幕上。
nl(添加行号打印):nl可以将输出的文件内容自动的加上行号。more!!!
[root@node1 ~]# more /etc/man.configmore会在最后一行输出目前按显示内容的所占百分比,在现实过程中我们还可以输入以下命令进行进一步操作:空格(space):向下翻页回车(Enter):向下翻一行“/字符串”:在当前显示内容中线下查询字符串内容“:f”:立即显示出文件名以及目前显示的行数“q”:离开显示内容“b”或[ctrl]-b:代表回翻,该操作仅对文件有效less!!查看文件内容的时候可以进行一下操作:
空格:向下翻一页
[pagedown]:向下翻动一页
[pageup]:向上翻动一页
“/字符串”:向下搜索字符串内容
“?字符串”:向上搜寻字符串内容
n:重复上一次查询任务
N:反向重复前一个查询任务
g:到文件的第一行
G:到文件的最后一行(注意大小写)
q:离开文件head!!
head(取出前面几行,Centos6.5使用/etc/man.config文件):tail!!!管道!!!
|
[root@bk1 ~]# ps -ef |grep ssh
[root@bk1 ~]# yum list |grep mysql
如何显示文件中间的几行?
head  -m  profile  |  tail  -n
管道左侧的输出作为右侧的输入
echo  "/"  |  ls  -l   显示内容错误(不是预期的结果),因为ls不需要输入,只需要参数
Xargs!!
将前面输出作为后面命令的参数
echo  "/"  |  xargs  ls  -l
•xargs:命令
–1,在标准输入中读取到的内容!
–2,自己的参数理解为一个字符串
•模仿shell,做blank切分,第一个子字符串为命令
–3,将步骤1的内容做为步骤2的命令的选项参数拼接起来
–4,执行得到的结果

三、文本处理

3.0 linux中的正则表达式

hello.txt
hello world
are you ok?
areyou ok?
areyou are youok?
aaare you ok?
aare you ok
aaaare you ok
abcre you ok?
xxre you ok
are yyyou ok?
xk
zk
ok
yk
zzk
zxzxk
bxx
cxx
dxx
areyou are youok?
zk kz 1
kz zk 2
okk koo 3
zkkz
kzzk

cp /etc/profile .
grep “after” profile #查找文件内的包含该单词的行
grep -n “after” profile #添加查找的行在文档的行号。

-v表示不包含的
[root@bk1 ~]# grep -v “after” profile | grep “after”
[root@bk1 ~]# grep -v “pathmunge” profile | grep “after”
if [ “$2” = “after” ] ; then

3.0.1 匹配符:

1.\ 转义字符
2… 匹配任意单个字符
3.[1234abc],[^1234],[1-5],[a-d] 字符序列单字符占位
4.^ 行首
5.$ 行尾
6.<,>,<abc,abc>,<are> 单词首尾边界 okhelloworld ok hello world
7.| 连接操作符
8.(,) 选择操作符
9.\n 反向引用

匹配are aare xre,0到多个a字符
grep “a*re” hello.txt
匹配“a任意单个字符re”
grep “a.re” hello.txt

3.0.2 重复操作符:

1.* 匹配0到多次
2.? 匹配0到1次
3.+ 匹配1到多次
4.{n} 匹配n次
5.{n,} 匹配n到多次
6.{m,n} 匹配n到m次
粗体是扩展匹配,其他是基本匹配。

与扩展正则表达式的区别: grep basic grep默认工作于基本模式
-E选项让grep工作于扩展模式

匹配a一个到多个任意字符re
[root@bk1 ~]# grep “a+re” hello.txt
发现查询不出来,为什么?

[root@bk1 ~]# grep -E “a+re” hello.txt
或者
[root@bk1 ~]# grep “a+re” hello.txt
基本正则表达式中元字符
?,+,{,|,(和)丢失了特殊意义,需要加\,反斜杠:
?,+,{,|,(,以及),扩展模式不需要加反斜杠

所有字母和数字匹配自身,元字符可以添加\转义
[a-d]匹配abcd中的一个
[^a-d]匹配不是abcd中的任意一个的字符
需要注意:要使用[a-d]是abcd任意一个的传统方括号表达式的解释,需要设定环境变量:LC_ALL的值是C。参考链接

开始:
匹配包含bcd中任意一个字符的行
grep “[b-d]” hello.txt

基本正则模式,查找带问号的行
grep “?” hello.txt
.不代表重复,任意一个字符
grep “a.re” hello.txt
grep “a…re” hello.txt

grep “…re” hello.txt
grep “…re” hello.txt

匹配zk和xk
grep “[xz]k” hello.txt

匹配不是zk和xk的
grep “<[^zx]k” hello.txt

匹配行首,该行第二个字符一定得是k
grep “^.k” hello.txt

匹配行尾,
grep “.k$” hello.txt #该行最少两个字符,最后一个是k

匹配单词边界
grep “<are>” hello.txt

匹配单词开头:
grep “<are” hello.txt

匹配单词尾:
grep “re>” hello.txt

grep “<a*re>” hello.txt 表示0到多次,单词以a字符开头,或者不以a字符开头
grep “<you>” hello.txt
连接操作,取并集
grep -E "(<a
re>)|(<you>)" hello.txt

grep -E “a{3}” hello.txt 匹配该行中3个a重复的

grep -E “a{3,}” hello.txt
grep -E “a{3}” hello.txt

匹配一个到多个a
grep -E “a+” hello.txt
匹配0到1次a
grep -E “a?” hello.txt

课后练习:
aaa?匹配aa,aaa
grep -E “<aaa?re” hello.txt #以aa或aaa开头并带有re的单词的行
aare aaare aaaare
grep -E “aaa?” hello.txt #包含aa或aaa的行

grep “aaa?” hello.txt

匹配一次到多次:aaa和aaaa
grep “aaa+” hello.txt

扩展模式:
grep -E “aaa+” hello.txt

将匹配1次到多次的+再转义为+字符匹配

匹配0到任意多次
aaa*匹配aa,aaa,aaaa

匹配任意字符
grep -E “*” hello.txt

反向引用
myhello
abbaabba
baabbaab
abbabaab
baababba
grep -E “(ab)(ba)\1\2” myhello #匹配abba
grep -E “(ab)(ba)\2\1” myhello #匹配baab
{4}
grep:显示匹配行

-v:反显示
-e:使用扩展正则表达式
-n 用于显示行号,
-i 忽略大小写

匹配操作符

\转义字符
.匹配任意单个字符
[1249a],[^12],[a-k]  字符序列单字符占位
^ 行首
$ 行尾.* 匹配任意字符\<,\>:\<abc           单词首尾边界|连接操作符
\(, \)选择操作符
\{, \}
\|,\?, \+,\n 反向引用

例1:

ooxx12121212ooxx
ooxx 12121212oox 121212121212 ooxx 1212
oo3xx
oo4xx
ooWxx
oomxx$ooxxoo1234xxooxyzxxgrep    "\(^[0-9]\|[^0-9][0-9]\)[0-9]\{2\}\([0-9][^0-9]\|[0-9]$\)"   grep.txt
grep -E  "^[0-9]{4}[^0-9]|[^0-9][0-9]{4}[^0-9]|[^0-9][0-9]{4}$|^[0-9]{4}$" grep.txt

例2:

aaabbcaaaaa bbc aaa
bb bbc bbb
asgodssgoodsssagodssgood
asgodssgoodsssagoodssgod51  grep "a" test
52  grep  "a\{3\}"  test
53  grep  "\<aaa"  test
54  grep  "\<aaa\>"  test
55  grep "b" test
56  grep  "b\{2,3\}" test 59  grep "god" test
60  grep "godgood" test
61  grep "god*good" test
62  grep "god.*good" test
63  grep "god.*good.*god.*good" test
64  grep "god.*good+" test
65  grep "\(god.*good\)+" test
66  grep "\(god\).*good.*\1" test
67  grep "\(god\).*\(good\).*\1.*\2" test69  grep "\(god\).*\(good\).*\1.*\2"  test
70  grep "\(god\).*\(good\).*\2.*\1" test

3.1 cut:显示切割的行数据

- s:显示分隔符的行
- d:自定义分隔符
-f 选定显示哪些列m-n m列到n列-n 第一列到n列m- 第m列到最后列n 第n列

以:作为分隔符,切割passwd,输出从第3个字段到第5个字段

cut -d “:” -f 3-5 /etc/passwd

输出前两列内容:
cp /etc/passwd ./
cut -d “:” -f -2 passwd

输出字段3到最后一个字段
cut -d “:” -f 3- passwd

指定输出的分隔符:
cut -d “:” -f 3- --output-delimiter="…" passwd

输出第7个字段:
cut -d “:” -f 7 passwd

如果有的行没有分隔符,则输出会包含脏数据
echo helloworld 1>> passwd
cut -d “:” -f1 passwd

可以使用-s选项:
不打印没有分隔符的行:
cut -s -d “:” -f1 passwd

显示1,3,7列
– output-delimiter指定输出的时候的各字符分隔符
cut -d “:” -f 1,3,7 –s passwd
cut -d “:” -f 1,3,7 –s --output-delimiter="|" passwd

3.2 sort:排序文件的行

-t:自定义分隔符
-k:选择排序列
-n:按数值排序
-r:倒序**-u:合并相同行
-f:忽略大小写sort.txt
a b 1
dfdsa fdsa 15
fds fds 6
fdsa fdsa 8
fda s 9
aa dd 10
h h 11

默认字典序排序
sort sort.txt

指定字段分隔符,按照第2个字段的字典序排序
sort -t ’ ’ –k2 sort.txt

指定字段分隔符,按照第3个字段的值数值序排序
sort -t’ ’ -k 3 -n sort.txt

指定字段分隔符,按照第3个字段的值数值倒序
sort -t’ ’ –k 3 -nr sort.txt

3.3 wc:统计文本信息(行数,单词个数,字符个数)

wc [选项列表]... [文件名列表]...
DESCRIPTION 描述对每个文件输出行、单词、和字节统计数,如果指定了多于一个文件则还有一个行数的总计。没有指定文件或指定的文件是 -,则读取标准输入。-c, --bytes, --chars 输出字节统计数。-l, --lines 输出换行符统计数。-L, --max-line-length 输出最长的行的长度。-w, --words 输出单词统计数。--help 显示帮助并退出--version 输出版本信息并退出[root@bk1 ~]# wc sort.txt 7 21 66 sort.txt
[root@bk1 ~]# wc -l sort.txt
7 sort.txt
[root@bk1 ~]# cat sort.txt | wc -l
7
[root@bk1 ~]# wc -w sort.txt
21 sort.txt
[root@bk1 ~]# wc -c sort.txt
66 sort.txt

3.4 sed:行编辑器sed [options] ‘AddressCommand’ file …

-n: 静默模式,不再默认显示模式空间中的内容
-i: 直接修改原文件

-e SCRIPT -e SCRIPT:可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
-r: 表示使用扩展正则表达式

AddressCommand

d: 删除符合条件的行;
a\string: 在指定的行后面追加新行,内容为string
\n:可以用于换行
i\string: 在指定的行前面添加新行,内容为string
s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串

g: 行内全局替换    i: 忽略字符大小写
s///: s###, s@@@     \(\), \1, \2
可以没有;给定范围;查找指定行/str/

p: 显示符合条件的行;
r FILE: 将指定的文件的内容添加至符合条件的行处
w FILE: 将地址指定的范围内的行另存至指定的文件中;

cp /etc/inittab .
sed  's/\(id:\)[0-6]\(:initdefault:\)/\15\2/ig'  inittab
sed "s/\(IPADDR=\(\<2[0-5][0-5]\|\<2[0-4][0-9]\|\<1\?[0-9][0-9]\?\.\)\{3\}\).*/\188/"
ifcfg-eth0ed.txt
Authentication improvements when using an HTTP proxy server.
Support for POSIX-style filesystem extended attributes.
YARN's REST APIs now support write/modify operations.第一行下插入一行
sed  "1a\hello world" sed.txt
直接修改文件
sed -i "1a\hello world" sed.txt
删除第2行
sed -i "2d" sed.txt
删除文档中的每一行
sed "d" sed.txt
原来的内容要打印,匹配的行要打印,找到的行会打印两次
sed "/[0-9]/p"  sed.txt
匹配行中包含0-9任意一个字符的行,只打印找到的行
sed -n "/[0-9]/p"  sed.txt将filesystem替换为FS
sed "s/filesystem/FS/" sed.txt
忽略大小写
sed "s/filesystem/FS/i" sed.txt
不仅忽略大小写还要行内全局替换
sed "s/filesystem/FS/gi" sed.txtcp /etc/inittab ./
将文件中的默认运行级别改为5
sed  "s/[0-6]/5/"  inittab
发现将所有匹配的都修改了(注意并未修改原文件),匹配访问太广了。
更精确匹配方案的写法应该为如下命令:
sed  "s/id:[0-6]:initdefault:/5/"  inittab
但是还存在问题,匹配后被修改内容问匹配出的部分,范围过大。解决办法:
反向引用
sed  "s/\(id:\)[0-6]\(:initdefault:\)/\15\2/"  inittab
分析:
sed  "s/\(id:\)[0-6]\(:initdefault:\)/\15\2/"  inittabid:num:initdefalut:    \15\2
id:5:initdefault:
也可以写成:
sed -r  "s/(id:)[0-6](:initdefault:)/\15\2/"  inittab查找/etc/profile中包含PATH的行,将这些行写到指定的文件:hello.hello中
sed -n "/PATH/w hello.hello" /etc/profile

3.5 awk:强大的文本分析工具

相对于grep的查找和sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大;
简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。

3.5.1 -F 自定义分隔符

支持自定义变量,数组 a[1] a[tom] map(key)支持内置变量

NF                 浏览记录的域的个数
NR                 已读的记录数ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                      设置输入域分隔符,等价于命令行 -F选项
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符

3.5.2 支持函数

print、split、substr、sub、gsub

3.5.3 支持流程控制语句,类C语言

if、while、do/while、for、break、continue

搜索/etc/passwd有root关键字的所有行
cp /etc/passwd ./
awk  '/root/ { print $0}'   passwd统计/etc/passwd文件中,每行的行号,每行的列数,对应的完整行内容
awk -F ':' '{print NR "-" NF "-" $0}' passwd
打印第一列
逐行处理
awk -F':'  ' {  print  $1} ' passwd
cut  -d ':'  -f1  passwd
指定字符拼接
awk -F':'  ' {  print  $1"," $7} ' passwd
制表符拼接字段
awk -F':'  ' {  print  $1"\t" $7} ' passwd
之前做点儿事情,之后做点儿事情
awk -F':'  'BEGIN{print "name\tshell"}  {print $1"\t" $7}  END{print "abdfafdsafdsa"}'  passwd
查找并打印整行
awk  ' /root/  {print $0}'  passwd
查找并截取打印某字段
awk -F ":"  ' /root/  {print $1}'  passwd
查找并打印
awk  ' /root/  {print $0,"ok"}  {print $0}'  passwd
awk -F ':'  ' /root/  {print $1,"ok"}  {print $0}'  passwd
打印已读记录数和字段个数
awk  -F':'  '{print  NR  "\t"  $0  "\t"  NF}'  passwd
awk -F ':' '{print $0 "-" NR "-" NF}' passwd

3.5.4 举例

  • 只显示/etc/passwd的账户:
    awk -F':' '{print $1}' passwd
  • 只显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行开始前添加列名name,shell,在最后一行添加"blue,/bin/nosh"(cut,sed)
    awk -F':' 'BEGIN{print "name,shell"} {print $1 "," $7} END{print "blue,/bin/nosh"}' passwd
  • 搜索/etc/passwd有root关键字的所有行
    awk '/root/ { print $0}' passwd

统计/etc/passwd文件中,每行的行号,每行的列数,对应的完整行内容awk -F’:’ ‘{print NR “\t” NF “\t” $0}’ /etc/passwd`

  • 统计报表:合计每人1月工资,0:manager,1:worker
awk   '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5;if($2=="0"){role[$1]="M"}else{role[$1]="W"}}} END{for(i in name){print i "\t" name[i]"\t" role[i]}}'    awk.txt

test.sh

{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}if($2=="0"){role[$1]="manager"}else{role[$1]="worker"}}
}
END{for(i in name){print i "\t" name[i]}
}

linux基础(四):shell简单命令;文件系统命令,系统操作命令,文本操作命令;文本处理命令相关推荐

  1. Linux基础篇--shell脚本编程基础

    Linux基础篇–shell脚本编程基础 本章内容概要  编程基础  脚本基本格式  变量  运算  条件测试  配置用户环境 7.1 编程基础 程序:指令+数据 程序编程风格:   过程式:以指令为 ...

  2. Linux基础之shell变量

    Linux基础之shell变量 一.shell变量及其他相关介绍 二.shell变量类型 三.shell变量用法 四.定义命令别名 五.系统变量文件定义说明 一.shell变量及其他相关介绍 1.编译 ...

  3. Linux基础二(挂载、关机重启与系统等级)

    一.Linux 基础之挂载 1. 挂载和查询 1.1 挂载 什么叫挂载?装系统的时候要给硬盘分区,在 Windows 中要分 C 盘 D 盘 DEF 盘,这个操作我们叫做分配盘符,分配盘符之后我们就可 ...

  4. linux基础:shell中的sh与bash区别与常用命令

    目录 一,什么是sh和bash? 二,shell的基本用法 2.1,变量 2.2,算术运算 2.3,使用 bash 计算器在shell脚本中进行浮点运算 2.4,shell中的条件判断命令test和[ ...

  5. linux 基础学习之目录与文件处理命令

    尼玛哥编写这些命令只是为了自己能够更好的学习linux也欢迎大家有空都来看看学习学习好的接下里咱们就开始学习下基本的文件与目录的管理 一 处理目录的常用命令 ls 列出目录 cd 切换目录 pwd 显 ...

  6. Linux基础.umask,权限影响,文件类型,/根目录文件,环境变量,alias别名,man手册

    一. 为什么文件的起始权限都是664,目录都是775? 文件: 默认创建没有执行权限 目录: 默认有执行权限 --> 因为目录没有没有执行权限,就不能切换到目录中 -rw-rw-r-- 1 ge ...

  7. 《Linux基础三》用户和文件权限管理

    用户和文件权限管理 1,用户 管理员用户: Root用户,也称根用户.超级用户.超级管理员 可对根目录执行读写和执行操作 具有系统中的最高.所有权限 普通用户: 权限有限的用户 Root用户拥有系统的 ...

  8. 渗透测试-Kali Linux学习(Linux基础、Shell编程、渗透测试软件)

    目录 目录结构 SSH连接 开关机与重启 关机 重启 文件目录 目录 显示/切换 创建与删除 文件 创建 复制 移动 查看 重定向和追加 软链接 查找 备份与压缩 .gz .zip .tar.gz 用 ...

  9. Linux基础知识--- 1、centos文件夹介绍

    /boot 引导程序,内核等存放的目录. 这个目录,包括了在引导过程中所必需的文件,引导程序的相关文件(例如grub,lilo以及相应的配置文件以及Linux操作系统内核相关文件(例如vmlinuz等 ...

  10. 专业地攻击:优秀黑客的Linux基础,part 4(查找文件)

    2019独角兽企业重金招聘Python工程师标准>>> 我之所以写这一些列的文章是应为很多人在使用Linux的时候都有不解的地方.作为一个黑客,Linux技能是无可替代的攻击利器. ...

最新文章

  1. 《树莓派Python编程指南》——2.2 一个Python游戏:猫和老鼠
  2. 常见linux命令使用方法(二)
  3. ONTAK2010 Peaks加强版(离线在线)
  4. Kafka Manager 编译 + 部署运行
  5. python对字符串(内嵌的字典)转为字典
  6. 【移动开发】EditText输入字数限制总结(包括中文输入内存溢出的解决方法)...
  7. 仿Gin搭建自己的web框架(七)
  8. 一群阿里人如何用 10 年自研洛神云网络平台?技术架构演进全揭秘!
  9. java jsp session_JSP中Session的使用
  10. Docker安装Redis(docker-compose.yml)
  11. 【kafka】Apache Kafka 中的事务
  12. Oracle创建数据库出错,oracle 10g dbca创建数据库出错 急急急
  13. QQ-AR实物识别!香蕉扫一扫,解救小黄人?
  14. EPLAN P8 2.7在WIN10上安装无法连接虚拟加密狗的解决方法
  15. 设计房屋租赁管理系统--PostgreSQL--数据库原理及应用
  16. 国产自主可控智慧会议系统解决方案-移动无纸化会议
  17. 项目经理所应具备的八项素质:
  18. Arcgis操作系列一:shp矢量数据的面积计算
  19. php后端管,管理后台-后端-PHP篇
  20. Office快捷键大全之三(Access快捷键上篇)

热门文章

  1. 美团面试:MySQL 自增主键一定是连续的吗?
  2. 世界读书日之所思所想
  3. android实现电话通信原理,电话通信原理.pdf
  4. 华硕Eee PC 1001HA拆机指南 如何拆机,看这里
  5. C语言简单的键盘玩扫雷小游戏(完结)
  6. 去除idea中xml黄色背景
  7. python import变灰_python--pycharm中import导入包呈现灰色问题之解决~很实用
  8. 计算机网络(七) | 应用层:HTTPS协议
  9. Java之IO,BIO,NIO,AIO知多少?
  10. ad被锁定的账户_如何在AD中方便查询被锁定的帐号状态和特定条件的查询被锁定的帐号...