Linux shell command学习笔记(二)
- <cut>
作用:从输入文件或者命令的输出中析取出各种域
用法:cut –c{字符串范围} –d{字段间分割符} –f{字段索引编号}
举例:
(1)查看在线用户:who | cut –c1-8
(2)从系统文件/etc/passwd中获取用户名列表:cut –d: -f1 /etc/passwd
[dannchen@sqaauto3 ~]$ ls
D4C Desktop Documents Downloads Music Pictures process process1 process2 Public Templates Videos
[dannchen@sqaauto3 ~]$ ls | cut -c1-
D4C
Deskt
Docum
Downl
Music
Pictu
proce
proce
proce
Publi
Templ
Video
- <paste>
作用:将多个域合并
用法:paste –d{字段间分割符}
举例:
paste –d’:’ filename1 filename2
[dannchen@sqaauto3 D4C]$ cat .c
just for test!
[dannchen@sqaauto3 D4C]$ cat .c
#include <stdio.h>
int main(){
printf("hello world!\n");
return ;
}
[dannchen@sqaauto3 D4C]$ paste -d':' .c .c
#include <stdio.h>:just for test!
int main(){:
printf("hello world!\n");:
return ;:
}:
- <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 kex 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/
Linux shell command学习笔记(二)的更多相关文章
- Linux shell command学习笔记(一)
Shell的种类有很多种,例如CSH,Bourne Shell,Korn Shell.在现在的大多数Linux发行版中,默认的Shell一般都是Bourne again shell(bash). &l ...
- linux shell编程学习笔记(二) --- grep命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
- Linux shell 菜鸟学习笔记....
20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...
- Linux Shell编程学习笔记——目录(附笔记资源下载)
LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...
- Linux shell 重定向学习笔记
在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读 ...
- linux shell脚本学习笔记一
一.文件比较运算符-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]-d filename 如果 filename为目录,则为真 [ -d /tm ...
- Linux Shell 编程学习笔记
1:Shell Script中if语句的条件部分要以分号来分隔 2:要注意条件测试部分中的空格.在方括号的两侧都有空格 3:echo "Hi, ${a}s" 单引号中的变量不会进行 ...
- linux shell编程学习笔记(一)---通配符,元字符
linux通配符: 通配符是由shell处理的(不是由所涉及到命令语句处理的,其实我们在shell各个命令中也没有发现有这些通配符介绍), 它只会出现在 命令的“参数”里(它不用在 命令名称里, 也不 ...
- Linux System Programming 学习笔记(二) 文件I/O
1.每个Linux进程都有一个最大打开文件数,默认情况下,最大值是1024 文件描述符不仅可以引用普通文件,也可以引用套接字socket,目录,管道(everything is a file) 默认情 ...
随机推荐
- 热门游戏<开心消消乐>的“加壳”诡计!!
好久没搞游戏了,前几天看了又又一次看了看<开心消消乐>的1.29最新版..于是故事開始了: 1.反编译分析 首先使用Androidkiller进行反编译,得到两个Smali代码目录:mal ...
- BOOST_CLASS_EXPORT
用基类的指针去转存派生类时除了上一篇boost::serialization 用基类指针转存派生类(错误多多,一波三折)之外.还有还有一种更简单的方法: 用BOOST_CLASS_EXPORT宏. 以 ...
- 暑假集训-WHUST 2015 Summer Contest #0.2
ID Origin Title 10 / 55 Problem A Gym 100625A Administrative Difficulties 4 / 6 Problem B Gym 1006 ...
- 源码编译安装Nginx全程视频演示
基本步骤: 1.首先停止现有web系统, #/etc/init.d/apache2 stop 2.将源码拷贝到/usr/local/src #cp /home/ditatompel/Public/Ng ...
- C#中如何获得两个日期之间的天数差 ( c# 计算两个日期之间相差的天数 )
DateTime dtLast = new DateTime(Convert.ToInt32(LastMenses.Year), Convert.ToInt32(LastMenses.Month), ...
- SCOPE_IDENTITY()和 SELECT @@IDENTITY 的用法
这俩个,是在插入数据的时候使用,返回刚刚插入数据行的ID 大家慎用@@IDENTITY,而尽量采用 SCOPE_IDENTITY() 函数替换之. SCOPE_IDENTITY() 也是得到最后一条 ...
- IDEA设置注释模板最佳实践
效果 在方法上输入/**,然后按tab键,生成的效果如下 配置步骤 1. 在Live Templates中添加模板组,命名随意,主要是为了存放自定义的模板,方便管理 2. 在模板组下添加一个模板,具体 ...
- react基础课程一简述JSX及目录关系
简述JSX及目录关系 简述:它被称为JSX,它是JavaScript的语法扩展,JSX是一种模板语言,但它具有JavaScript的全部功能.所以学习jsx还是需要学习基础的javaScript的. ...
- wc---计算字数。
Linux wc命令用于计算字数. 利用wc指令我们可以计算文件的Byte数.字数.或是列数,若不指定文件名称.或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据. 语 ...
- 零基础学python-7.6 字符串格式化表达式
字符串格式化同意在一个单个的步骤中对一个字符串运行多个特定类型的替换 特别是给用户提示的时候,格式化很方便 实现方法: 1.格式化表达式,类似于c语音的printf 在表达式中,我们使用%二进制操作符 ...