Linux中常用文件字符串分析的命令
在linux中文件管理与系统管理的方面,经常会用到要从一个文件中或者一长串字符串中提取你所需要的数据,或者某些字段来进行查看或者分析,作为一个初级linux小菜鸟,我大体总结整理了几个常用的分析命令,希望能互相交流与探讨下。
主要是管道命令中的几个命令: grep,sed,awk,cut,wc,split,printf
管道命令的基本用法
command1 | command2 | command3
管道命令可以直接在”|” 后面直接使用,也可以直接后面接要操作的文件数据名
1, grep
它主要是将给定的字符串在要进行比对的文件数据中,进行字符串的查找,将符合条件的字符串打印出来,它主要是以行为单位进行处理的,最后以整行为单位来进行显示。
格式:
grep
[-cinv] [-A] [-B] pattern filename
参数说明:
-c : 只输出匹配的总次数
-i : 忽略大小写
-n : 仅仅显示匹配的行号,及匹配的行
-v : 反向选择,显示没有keyword的行
参数说明:
-c : 只输出匹配的总次数
-i : 忽略大小写
-n : 仅仅显示匹配的行号,及匹配的行
-v : 反向选择,显示没有keyword的行
-A: 后面加数字,为after,除了列出匹配的行,再将后续的n行列出来
-B: 后面加数字,为before,除了列出匹配的行,再将前面的n行列出来
Pattern为具体的要查找的字符串,如“root”或者是“正则表达式”
正则表达式:
^word 待查找的word在行首
word$ 待查找的word在行尾
. 代表任意一个字符
* 重复前一个字符0到无穷多次
[abc] 从字符集合中选取一个,仅仅有其中一个,即a或者b或者c
[n1-n2] ,从字符集合的选取范围内查属于其中的一个字符
[^list] 不属于该字符串的范围的字符
{n,m}, 连续n到m个前一个字符
^$ 代表的是空行号
example:
#获取行首字符为the的行
grep -n '^the' filename
#获取一个任意f???d字符串,使用三个.
Grep -n 'f...d' filename
#获取至少有2个“e”的字符,如feed,geeed
grep -n ‘feee*d’ filename
#获取一个空行号
grep -n '^$' filename
2,sed
sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern
space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有
改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程
主要用来对数据进行替换,删除,新增,选取特定行,它主要是以行为单位的
格式:
sed
[-nefr] [[n1[,n2]]
function]
参数说明:
-n : 使用安静(silent)模式,默认况下所有来自STDIN的数据都会显示在屏幕上,
参数说明:
-n : 使用安静(silent)模式,默认况下所有来自STDIN的数据都会显示在屏幕上,
加上-n则只有经过sed处理才显示
-e : 直接在命令行模式上进行sed的操作编辑,主要是多点编辑,一行可以处理多个命令
-f : 直接将sed操作写在一个文件内,-f filename 则可以执行文件内sed操作
-e : 直接在命令行模式上进行sed的操作编辑,主要是多点编辑,一行可以处理多个命令
-f : 直接将sed操作写在一个文件内,-f filename 则可以执行文件内sed操作
-r : sed操作支持的是扩展正则表达式语法(默认为基础正则)
-i:
直接修改读取的文件内容,会真正的修改原始文档
操作说明: [n1[,n2]] function
操作说明: [n1[,n2]] function
function参数:
a :新增,a后面可以接字符串,字符串会在当前的下一行出现
c :替换,c后面可以接字符串,这些字符串可以替换n1,n2之间的行
d :删除,不需接任何内容
i :插入,i后面接字符串,字符串在当前的上一行出现
p :打印,打印某个选择的数据,通常与sed -n一起运行
s :搜索,不但可以搜索,还可以替换,如:1,20s/old/new/g
a :新增,a后面可以接字符串,字符串会在当前的下一行出现
c :替换,c后面可以接字符串,这些字符串可以替换n1,n2之间的行
d :删除,不需接任何内容
i :插入,i后面接字符串,字符串在当前的上一行出现
p :打印,打印某个选择的数据,通常与sed -n一起运行
s :搜索,不但可以搜索,还可以替换,如:1,20s/old/new/g
sed后面的动作一定是要用‘’括住
example:
#删除2到5行直接的数据
cat -n /etc/passwd | sed '2,5d'
#删除第2行到最后一行的数据
cat -n /etc/passwd | sed '2,$d'
#在第2行后加一条字符串,(在第二行前用2i)
cat -n /etc/passwd | sed '2a hello word'
sed执行动作的时候,读取到相应的function后即开始处理,后面若有字符串就当作是要操作的字符串
同时添加多行的时候,每一行数据后面紧跟””,单引号要最后使用
#将第2行到第5行替换为“hello
world”
cat -n /etc/passwd
| sed ‘2,5c hello world’
#将第2行到第5行打印出来
cat -n /etc/passwd
| sed -n ‘2,5p’
#将部分数据的查找与替换
格式:sed
‘s/replacestring/newstring/g’
3.awk
awk是一个数字处理工具。相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分为数个“字段”来处理。
awk 'pattern1{action1}pattern2{action2}pattern3{action3}...'
filename
两者是可选的,如果没有模式,则action应用到全部记录,如果没有action,则输出匹配全部记录。
3.1.模式
模式可以是以下任意一个:
(1)正则表达式:使用通配符的扩展集。
(2)关系表达式:关系运算符进行操作,可以是字符串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。
(4)模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
(5)模式,模式:指定一个行的范围。该语法不能包括BEGIN和END模式。
(6)BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。
(7)END:让用户在最后一条输入记录被读取之后发生的动作。
3.2. 操作
(1)变量或数组赋值
(2)输出命令
(3)内置函数
(4)控制流命令
awk内置变量:
NF : 每一行($0)拥有的字段总数
NR :当前awk所处理的是“第几行”数据
FS : 当前分隔符,默认空格键
NF : 每一行($0)拥有的字段总数
NR :当前awk所处理的是“第几行”数据
FS : 当前分隔符,默认空格键
在每一行的每个字段都是有变量名称的,如$1,$2,$3。。
如:
last -n | awk '{ print $1 “ lines: ” NR “ columes :”
NF}'
4.cut
cut是将一段信息切割出来,将同一行的数据进行分解,它一
般输出的是符合条件的字段,并不是一整行的数据,以行为处理单位,输出主要是以字段为单位,也就是输出的仅仅是行的一部分数据,主要用于分析log文件
格式:
cut -d '' -f fileds
cut -c 字符范围
参数:
-d:后面接分隔符,与-f一起使用
-f:根据-d的分隔符将一段消息分为数段,-f表出取出第几段
-c:以字符为单位取出固定的字段范围
参数:
-d:后面接分隔符,与-f一起使用
-f:根据-d的分隔符将一段消息分为数段,-f表出取出第几段
-c:以字符为单位取出固定的字段范围
example:
#输出分割后的第3和第5段
echo $PATH | cut -d ':' -f 3,5
echo $PATH | cut -d ':' -f 3,5
#将path中第13个字符后的字符串输出