linux常用指令(3)文本处理

查看文件内容

cat /var/log/messages | grep mount   查看出错日志文件
tac file1 从最后一行开始反向查看一个文件的内容 
more file1 查看一个长文件的内容 
less file1 类似于 ‘more‘ 命令,但是它允许在文件中和正向操作一样的反向操作 
head -2 file1 查看一个文件的前两行 
tail -2 file1 查看一个文件的最后两行 
tail -f /var/log/messages 实时查看被添加到一个文件中的内容

patch和diff的用法

diff -Nuar test1 test2 > a.patch  比较两个文件或文件夹的差别输出到patch文件中

patch -p1 < a.patch 将a.patch和要修改的文件(test1)放在同一目录使test1被替换成test2,不能修改的部分放在.mk

patch -RE -p0 < a.patch  恢复

数据流重定向

0(stdin,使用<或<<)  1(stdout,使用>或>>)  2(stderr,使用2>或2>>)

cat  < txt > ttt       将文件txt的内容复制到ttt

cat   >txt < ttt       将文件ttt的内容复制到txt  <表示标准输入重定向可以用文件ttt的内容来替代键盘输入

cat  > txt <<"eof" 从标准输入写数据到txt中,输入eof时结束输入(txt中不会有eof)

1>  1>>  2>  2>>  (没有空格)将正确(出错)数据输出(追加)到指定文件或设备(/dev/null)上

find /home -name .bashrc > txt_ringht 2> txt_error  出错信息在txt_error

find /home -name .bashrc > txt 2>&1     出错和正确信息都在txt

find /home -name .bashrc &> txt            出错和正确信息都在txt

tee 同时将数据流送到文件和屏幕

last | tee [-a] txt | cut -d ‘ ‘ -f1  将last的输出备份(追加)一份到txt中

grep命令

<1>参数: 

-i :忽略大小写   -c :打印匹配的总行数   -l :列出包含匹配项的文件名 -L:列出不包含匹配项的文件名

-v :查找不包含匹配项的行  -r :搜索子目录

-n:打印包含匹配项的行和行标     -w:匹配整个单词
<2>RE(正则表达式):

\ 忽略正则表达式中特殊字符的原有含义
^ 匹配正则表达式的开始行
$ 匹配正则表达式的结束行
[ ] 单个字符;如[A] 即A符合要求
[^]  匹配一个不在指定范围内的字符
. 匹配一个非换行符的字符
* 匹配零个或多个先前字符
\<  锚定单词的开始,如:‘\<grep‘匹配包含以grep开头的单词的行。
\>  锚定单词的结束,如‘grep\>‘匹配包含以grep结尾的单词的行。
x\{m\} 连续重复字符x,m次,如:‘o\{5\}‘匹配包含连续5个o的行。
x\{m,\} 连续重复字符x,至少m次,如:‘o\{5,\}‘匹配至少连续有5个o的行。
x\{m,n\} 连续重复字符x,至少m次,不多于n次,如:‘o\{5,10\}‘匹配连续5--10个o的行。
\w  匹配一个文字和数字字符,也就是[A-Za-z0-9],如:‘G\w*p‘匹配以G后跟零个或多个文字或数字字符,然后是p。
\W  w的反置形式,匹配一个非单词字符,如点号句号等。\W*则可匹配多个。
\b  单词锁定符,如: ‘\bgrep\b‘只匹配grep,即只能是grep这个单词,两边均为空格。

<3>example

dmesg | grep -n -A3 -B2 --color=auto ‘eth‘   //列出内核信息,含有关键字‘eth‘,及关键字所在行的前两行(-B2)和后3行(-A3),
grep -n ‘^the‘ txt            //匹配文件txt中行首是"the"的行
grep -n ‘\.$‘ txt                //匹配txt中以‘.‘结尾的行(注意是转义字符)
grep -n ‘^[^a-zA-Z]‘ txt     //匹配不义字母开头的行
grep -v ‘^$‘ txt | grep -v ‘^#‘      //不显示txt中的空白行和注释行
grep -C number pattern files     //匹配的上下文分别显示[number]行,
grep Aug -R /var/log/*     //在目录 ‘/var/log‘ 及随后的目录中搜索字符串"Aug"
grep pattern1 | pattern2 files     //显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2     //显示既匹配 pattern1 又匹配 pattern2 的行。
grep ‘[a-z]\{5\}’ aa       //显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
echo $PATH | cut -d ‘:‘ -f 3,5     //用:作分隔符将变量PATH分成若干份,显示其中的第3,5部分(以行作单位)

sed工具

http://www.cnblogs.com/stephen-liu74/archive/2011/11/17/2245130.html

sed [-nefr] [动作] 动作用单引号括住;动作说明 [n1[,n2]]function;

<1>选项与参数:
-n (取消了sed的默认行为,默认将输入的文件都输出到stdout)       -i (直接修改读取的文件内容,而不是输出到终端)
<2>function:
a(新增一行或多行,后接字符串) c(整行的取代,后接字符串) d(删除,后面通常不接) i(插入到当前行的上一行,后接字串,)
p(列印通常与-n 一起运行)     s(取代,通常这个s的动作可以搭配正规表示法!例如 1,20s/old/new/g)
w file(追加到file文件中)   !(表示后面的命令对所有没有被选定的行发生作用)     q(退出sed)
&符号表示替换字符串中被找到的部分
<3>整行的处理
sed ‘2,5d‘ txt        //删除2~5行
nl txt | sed ‘2a drink tee or \
 >drink bear ?‘     //第二行与第三行之间添加2行
sed ‘2,5c No 2-5 number‘ txt      //将2-5行替换为“No 2-5 numbe”
nl txt | sed -n ‘2,5p‘     //查看2-5行(不加-n的话,txt全部输出,包括2-5行)
sed ‘/^#/d; /^$/d‘  txt    //删除空白行和注释行
sed  ‘/root/d‘ /etc/passwd        //先搜寻相应的行再处理,删除/etc/passwd所有包含root的行,其他行输出
sed -n ‘/root/p‘  /etc/passwd       //搜索 /etc/passwd有root关键字的行 (-n 只打印包含模板的行)
sed -n ‘5,/^northeast/p‘ testfile     //打印从第五行开始到第一个以northeast开头的行之间的所有行。
sed ‘/eastern/i\ NEW ENGLAND REGION‘ testfile     //i是插入命令,在匹配模式行前插入文本
sed -n ‘/north/w newfile‘ testfile     //将所有匹配含有north的行写入newfile中
nl /etc/passwd | sed -e ‘3,$d‘ -e ‘s/bash/blueshell/‘      // -e表示多点编辑
<4>以用行为单位进行部分数据的搜寻并取代
sed ‘s/old/new/g‘     //部分数据的查找与替换
nl /etc/passwd | sed -n ‘/root/{s/bash/blueshell/;p}‘
        //对文件中包含root的行,执行花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行
nl /etc/passwd | sed -n ‘/bash/{s/bash/blueshell/;p;q}‘
        //只替换/etc/passwd的第一个bash关键字为blueshell,就退出
 sed -n ‘s/\(Mar\)got/\1lianne/p‘ txt
        //模板Mar被包含在一对括号中,并在特殊的寄存器中保存为tag 1,它将在后面作为\1替换字符串,Margot被替换为Marlianne
sed -i ‘s/\.$/\!/g‘ txt       //直接修改txt文件,将txt文件中每一行结尾为‘.‘替换为‘!‘
sed ‘s/[0-9][0-9]$/&.5/‘ testfile        //所有以两个数字结束的行,最后的数字都将被它们自己替换,同时追加.5

awk数据处理工具

http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

<1>awk是以文件的一行为处理单位的,主要处理每一行字段内的数据,默认域分隔符为空格或[tab]键,

每一段的变量名称$1,$2;   $0代表一整行;能进行逻辑运算

<2>awk ‘pattern{action}...‘  filename

// pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令,pattern就是要表示的正则表达式,用斜杠括起来

awk -f awk-script-file input-file(s)    //-f选项加载awk-script-file中的awk脚本
cat /etc/passwd | awk  -F ‘:‘  ‘{print $1 "\t" $3}‘     //打印$1和$3并用[tab]隔开,-F(指定分隔符)
cat /etc/passwd |awk  -F ‘:‘  ‘BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}‘
    //第一行是"name,shell" ,最后一行是"blue,/bin/nosh",awk最先执行BEGIN,最后执行END
awk -F: ‘/root/{print $7}‘ /etc/passwd    //搜索/etc/passwd有root关键字的所有行,并显示对应的shell
cat /etc/passwd | awk ‘BEGIN {FS=":"}  $3 < 10{print $1 ‘‘\t" $3}‘     //分隔符是:,打印文件中的账号和UID小于10的行
ifconfig eth0 | grep Hwaddr | awk ‘{printf $5}‘ 在标准输出中输出MAC地址

<3> 内置变量

FILENAME awk浏览的文件名    FNR 浏览文件的记录数     FS 设置输入域分隔符,等价于命令行 -F选项

NF 浏览记录的域的个数      NR 已读的记录数

awk -F ‘:‘ ‘{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}‘ /etc/passwd

//统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容

<4>awk编程

awk变量和赋值

awk ‘BEGIN {count=0;print "[start]count:", count} {count=count+1;print $0;} END{print "[end]count:", count}‘ /etc/passwd
      //统计/etc/passwd的账户人数,注意将count初始化为0
ls -l |awk ‘BEGIN {size=0;} /^[^d]/{size=size+$5;} END{print "[end]size is ", size/1024,"K"}‘
        //统计某个文件夹下的文件占用的字节数,统计不包括文件夹的子目录,$5是该文件的大小
条件语句(和C语言中的一样),同样支持while、do/while、for、break、continue
ls -l |awk ‘BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}‘         //过滤4096大小的文件(一般都是文件夹)

排序

-f忽略大小写 -b忽略最前面的空格 -n(以数字排序,默认按字符排序) -r(反向排序,默认是升序排列)

-u(在输出行中去除重复行) -o(将结果写入原文件中,不能重定向到原文件)

cat txt | sort

sort txt

sort file1 file2 排序两个文件的内容 
sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份) 
sort file1 file2 | uniq -u 删除交集,留下其他的行 
sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)

uniq 排序后,将重复的数据仅列出一个显示 -i忽略大小写 -c计数

comm -1 file1 file2 比较两个文件的内容只删除 ‘file1‘ 所包含的内容 
comm -2 file1 file2 比较两个文件的内容只删除 ‘file2‘ 所包含的内容 
comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分



				
时间: 2024-10-01 00:22:58

linux常用指令(3)文本处理的相关文章

Linux常用指令和系统管理命令总结

Linux常用指令: ls 显示文件或目录 ls -l 列出文件详细信息 ls -a 列出当前目录下所有文件或目录,包括隐藏的 ls -al 显示详细文件信息,包括隐藏的文件 mkdir 创建目录 mkdir -p 创建目录,若无父目录,则创建父目录 cd 切换目录 touch 创建空文件 echo 创建带有内容的文件 cat 查看文件内容 cp 拷贝 mv 移动或者重命名 rm 删除文件 rm -r 递归删除,可删除子目录及文件 rm -f 强制删除 rm -rf 强制递归删除 find 在文

Linux 学习一 Linux常用指令,常用目录,Vi编辑器

1. Linux常用指令 常用指令 功能 startx 进入图形界面 Shutdown -h now 关机 Shutdown -r now  或者 reboot 重启 Su - 切换管理员 logout 注销 Ls   或者 dir 当前目录所有文件 Ls -l 当前目录所有文件详细信息 cd 切换目录 pwd 列出当前目录路径 Useradd XXX 添加用户XXX Passwd XXX 给用户XXX修改密码 Userdel XXX 删除用户XXX Userdel -r XXX 删除用户XXX

xshell-常用指令汇总 linux 常用指令

suse linux 常用命令  (1)命令ls——列出文件  ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件  ls a* 列出当前目录下以字母a开头的所有文件  ls -l *.doc 给出当前目录下以.doc结尾的所有文件 (2)命令cp——复制文件  cp afile afile.bak 把文件复制为新文件afile.bak  cp afile /home/bible/ 把文件afile从当前目录复制到/home/bible/目录下  cp * /tmp

ubuntu下linux常用指令总结

来实验室将近一个月,几乎没碰window,一直在ubuntu下开发,然后想总结一下最近常用的linux指令. (0) su和sudo:得到root权限 su 切换到root用户 sudo command 切换到root用户,执行command,然后切换回当前用户 su liaohuqiang 切换回普通用户 (1) apt:用于安装软件包 apt list 根据名称列出软件包 apt show 显示软件包细节 sudo apt install 安装软件包 sudo apt remove 卸载软件

linux学习(四)-----linux常用指令

touch 指令 touch 指令创建空文件 基本语法 touch 文件名称 应用实例 案例 1: 创建一个空文件 hello.txt cp 指令 cp 指令拷贝文件到指定目录 基本语法 cp [选项] source dest 常用选项 -r :递归复制整个文件夹 应用实例 案例 1: 将 /home/aaa.txt 拷贝到/home/bbb 目录下[拷贝单个文件] 案例 2: 递归复制整个文件夹,举例将/home/test 整个目录拷贝到 /home/zwj 目录 使用细节 强制覆盖不提示的方

Linux常用指令操作笔记

这篇博文是我在日常工作中比较常用的指令操作,陆续会慢慢补齐,大家觉得有用可以参考参考,我会不定时的修改这篇博文.我所使用的Linux操作系统版本是Ubuntu. 一.开关机 reboot 重启电脑 shutdown -r now 重启电脑 shutdown -h +10 "This is a warning information" 10分钟后关机 poweroff -h 关机 二.版本 uname -a 查看linux当前版本 三.安装 apt-get install 要安装的包 四

Linux常用指令---grep(搜索过滤)

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板.如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名.搜索的结果被送到标准输出,不影响原文件内容. grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成

Linux常用指令---ps(查看进程)

Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令. 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵死.哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执

Linux常用指令---find | locate(查找)

1.locate locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库. 命令参数: -e   将排除在寻找的范围之外. -1  如果 是 1.则启动安全模式.在安全模式下,使用者不会看到权限无法看到 的档案.这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权