Linux shell command学习笔记(二)

  • <cut>

  做用:从输入文件或者命令的输出中析取出各类域linux

  用法:cut –c{字符串范围} –d{字段间分割符} –f{字段索引编号}shell

  举例:vim

  (1)查看在线用户:who | cut –c1-8安全

  (2)从系统文件/etc/passwd中获取用户名列表:cut –d: -f1 /etc/passwdide

[dannchen@sqaauto3 ~]$ ls
D4C  Desktop  Documents  Downloads  Music  Pictures  process  process1  process2  Public  Templates  Videos
[dannchen@sqaauto3 ~]$ ls | cut -c1-5
D4C
Deskt
Docum
Downl
Music
Pictu
proce
proce
proce
Publi
Templ
Video
  • <paste>

  做用:将多个域合并函数

  用法:paste –d{字段间分割符}spa

  举例:code

  paste –d’:’ filename1 filename2blog

[dannchen@sqaauto3 D4C]$ cat 2.c
just for test!
[dannchen@sqaauto3 D4C]$ cat 1.c
#include <stdio.h>
int main(){
        printf("hello world!\n");
        return 0;
}
[dannchen@sqaauto3 D4C]$ paste -d':' 1.c 2.c
#include <stdio.h>:just for test!
int main(){:
        printf("hello world!\n");:
        return 0;:
}:
  • <sort>

  做用:排序排序

  用法:

  -t 指定分隔符, 默认为空格

  -r 以降序来排列

  -u 去掉重复行

  -d 以字典序来排列,包括字母,数字,符号等

  -n 以数字序来排列

  +positon1 -positon2 从第position1 字段到position2字段,包括position1,不包括position2。positon1从0开始。

  -k KeyDefinition 指定排序关键字。KeyDefinition 选项的格式为:

  [ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

  排序关键字包括任何以 FStart 变量指定的字段和 CStart 变量指定的列开头的字符及以 FEnd 变量指定的字段和

  CEnd 变量指定的列结束的字符。Modifier 变量的值可以是 b、d、f、i、n 或 r。修饰符和同一字母的标志等价。

  举例:

  (1)          对/etc/passwd 文件的第三项进行排序(userid): sort -t: -k 3n /etc/passwd

  (2)          基于ip地址对/etc/hosts文件排序: sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts

  • <uniq>

  做用:对数据进行去重

  用法:先要对数据进行排序,而后再去重

  -d:输出重复行

  -c:对数据进行计数

  举例:

  找出/etc/passwd文件中的重复用户名:sort /etc/passwd | cut –f1 –d: | uniq –d

  • <sed>

  做用:编辑数据

  用法:

  sed command file

  -n选项:指定行号或者行号范围,若是未指定,表示任意一行;用p表示打印

  举例:

  sed –n ‘-1,2p’ file.txt #显示前两行

  sed –n ‘/UNIX/p’ filename #显示包含“UNIX“的行

  d命令:删除数据

  举例:

  sed ‘1,2d’ intro #删掉前两行

  sed ‘/UNIX/d’ intro #删掉包含“UNIX“的行

  s命令:替换

  举例

  Sed ‘s/Unix/UNIX/g’ intro > temp #将文件intro中“Unix“替换为UNIX, 并将结果保存到temp文件中

  • <vi>

  (1) 光标移动

  nG:光标移至第n行首

  n+:光标下移n行

  n-:光标上移n行

  n$:光标移至第n行尾

  (2) 删除命令

  do:删至行首

  d$:删至行尾

  ndd:删除当前行及其后n-1行

  :n1,n2 d:将n1行到n2行之间的内容删除

  (3) 搜索替换

  /pattern:从光标开始处向文件尾搜索pattern

  ?pattern:从光标开始处向文件首搜索pattern

  :s/p1/p2/g:将当前行中全部p1均用p2替代

  :n1,n2s/p1/p2/g:将第n1至n2行中全部p1均用p2替代

  :g/p1/s//p2/g:将文件中全部p1均用p2替换

  (4) 复制粘贴

  yy:复制当前行,将光标移动到某一行,p粘贴

  n1,n2 co n3:n1为起始行,n2为结束行,n3为粘贴行(其中,co是copy的简称,也能够直接用copy代替)

  (5) 文件保存与退出

  :w :保存当前文件

  :x :保存当前文件并退出

  :q!:不保存文件并退出vi

  (6) 多个文件之间的复制粘贴

  先在开始处作标志mk (注:m是作标注的命令,语法是m[字母],[字母]为该行的标注)

  而后在末尾用”ay k (光标自动回到开始处,此时已经把你的内容放到缓冲区了)

  其中a表示缓冲区a

  而后用ex转义到你的文件B中,而后用”ap命令粘贴就行

  即:vi 1.txt 2.txt mk“ay kex 2.txt ”ap

  (7)  vi切分窗口

  :split two.c:打开另外一个窗口并用该窗口编辑另外一个指定的文件

  :vsplit:垂直分割窗口

  CTRL-W:跳转窗口

  (8) 比较两个文件的不一样之处

  vimdiff 1.txt 2.txt

  • <diff><patch>

  (1) diff命令

  功能是用来比较两个文件的不一样,而后记录下来,也就是所谓的 diff 补丁

  选项

  -r 是一个递归选项

  -u 选项以统一格式建立补丁文件,这种格式比缺省格式更紧凑些。

  (2) patch命令

  patch 就是利用 diff 制做的补丁来实现源文件(夹) 和目的文件(夹) 的转换。

  选项:

  -p0 选项要从当前目录查找目的文件(夹)

  -p1 选项 要忽略掉第一层目录,从当前目录开始查找。

  -E 选项说明若是发现了空文件,那么就删除它

  -R 选项说明在补丁文件中的 “ 新 ” 文件和 “ 旧 ” 文件如今要调换过来了(实际上就是给新版本打补丁,让它变成老版本)

  举例:

  单个文件:

  diff –uN from-file to-file >to-file.patch

  patch –p0 < to-file.patch

  patch –RE –p0 < to-file.patch

  多个文件:

  diff –uNr from-docu to-docu >to-docu.patch

  patch –p1 < to-docu.patch

  patch –R –p1 <to-docu.patch

  • <find>

  find pathname -options [-print -exec -ok ...]

  (1) 含义解释

  pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。

  -print: find命令将匹配的文件输出到标准输出。

  -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } \;,注意{ }和\;之间的空格。

  -ok: 和-exec的做用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每个命令以前,都会给出提示,让用户来肯定是否执行。

  (2) 选项

  -name:按照文件名查找文件

  -mtime -n +n:按照文件的更改时间来查找文件, – n表示文件更改时间距如今n天之内,+ n表示文件更改时间距如今n天之前

  -newer file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件

  -type:查找某一类型的文件,诸如:b – 块设备文件,d – 目录,c – 字符设备文件,p – 管道文件,l – 符号连接文件,f – 普通文件

  -depth:在查找文件时,首先查找当前目录中的文件,而后再在其子目录中查找

  (3) xargs

  find命令的-exec选项处理匹配到的文件时, find命令将全部匹配到的文件一块儿传递给exec执行。但有些系统对可以传递给exec的命令长度有限制,这样在find命令运行几分钟以后,就会出现溢出错误。错误信息一般是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一块儿使用.

  (4) 举例

  用ls -l命令列出所匹配到的文件,能够把ls -l命令放在find命令的-exec选项中

  find . -type f -exec ls -l { } \;

  查找系统中全部文件长度为0的普通文件,并列出它们的完整路径;

  find / -type f -size 0 -exec ls -l { } \;

  用grep命令在全部的普通文件中搜索hostname这个词:

  find . -type f -print | xargs grep “hostname”

  • 数学计算

  (1) expr

  expr可用于计算各类表达式的值,可包含字符串,逻辑运算和函数(但没有指数或者对数函数)。

  加法:answer=`expr $c + $d`

  减法:answer=`expr $c – $d`

  乘法:answer=`expr $c \* $d`

  减法:answer=`expr $c / $d`

  (2) shell内部运算

  shell自身可进行数学计算,使用shell内部函数的好处是,不用调用外部程序,从而减小外部内存使用量。

  加法:answer=$(($c + $d))

  减法:answer=$(($c – $d))

  乘法:answer=$(($c * $d))

  减法:answer=$(($c / $d))

  (3) bc计算器

  前面两种数学计算方法均是集中在整数计算上,而bc是一个实现任意精度的计算器,可经过设置scale(小数点后十进制位数),达到想要的精确度的结果。

  加法:answer=`echo “$c + $d”|bc`

  减法:answer=`echo “$c – $d”|bc`

  乘法:answer=`echo “$c * $d”|bc`

  减法:answer=`echo “$c / $d”|bc`

  使用scale设置精度:

  answer=`echo “scale=5;$c * $d”|bc`

  若想使用三角函数,须要用-l选项激活bc,启动数学函数库:

  answer=`echo “scale=5; c($d)”|bc -l`

 

参考:

http://dongxicheng.org/script/linux-shell/

相关文章
相关标签/搜索