ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Linux:文本处理及正则表达式

Linux:文本处理及正则表达式

原创 Linux操作系统 作者:果果的空间 时间:2013-08-14 17:48:56 0 删除 编辑
引入:

筛选文本中包括xl的部分 
grep xl/etc/passwd  都会出来
grep '\<xl\>' /etc/passwd  只包含以xl开头和结尾的内容
grep , 可以使用扩展的正则表达式来进一步定义关键字, 进行筛选
grep bash /etc/passwd
grep -v bash /etc/passwd 筛选不包括bash字样的内容 -V显示版本
grep -A5 -B5 xl/etc/passwd 显示包含xl的(Before)前5行和后(After)5行

正则表达式: 是为了精确描述需要的内容所设置的,可以用于多个命令 . * [] ^ $ \<  \> ...

学习内容
1.对文本文件的操作命令
2.使用正则表达式的命令
3.正则表达式
4.对文本的操作
5.组合命令完成复杂任务

文本文件操作命令
cat 查看文件内容  cat /etc/passwd  实际是对文本的操作,不一定是对文本文件的操作
more 逐屏查看文件内容,仅能向下翻 ,显示完直接退出
less  逐屏查看文件内容 less 来回上下翻, 可以查找, 但是需要交互,需要按交互命令,按"退出"
head 显示文件开头部分内容 查看文件的头10行, 
tail 显示文件结尾部分内容  查看文件的末尾10行, -f 可以监视文件日志 
如:
tty1 和 tty2两个进程
tty1监控  tail -f /var/log/messages
tty2开启程序 service httpd restart
在tty1 中就能看到程序的启动

diff 报告文件差异
uniq 去除文件中相邻的重复航
cut 只显示文件中的某一列 cut -d: -f1 /etc/passwd
sort 按序重排文本
wc 统计文件的行,词,字数

cut 命令:
cut -f2 /etc/passwd  没有控制住,显示的是完整的文本
cut -d : -f2 /etc/passwd 显示passwd中的第二列
cut -d : -f7 /etc/passwd 显示passwd中的第7列的文本
cut -d : -f7 /etc/passwd |grep xl 显示passwd中的第7列,包含xl 的文本
grep xl /etc/passwd | cut -d : f7  搜索xl 显示第七列的内容
cut -c1-3 /etc/passwd 显示passwd 第一列的第一到第三个字符
cut -d : -f7 /etc/passwd | uniq 去掉文件中相邻的重复行
cut -d : -f7 /etc/passwd | uniq | wc -l  去掉文件中相邻的重复行后,统计字数


sort命令:
sort -t : -n /etc/passwd 使用sort进行排序
sort -t : +2 -n /etc/passwd  使用参数+2后,无法显示,有问题,做不出来,0为第一列,2为第三列
sort -t : -n /etc/passwd > /tmp/a 将passwd文件内容排序后放入到a文件里 cat /tmp/a

wc命令:
wc /etc/passwd
wc -c /etc/passwd 多少字符
wc -l /etc/passwd 多少行
wc -w /etc/passwd 多少单词

du命令: 查看文件大小
du
du | sort
du | sort -n  按照文件大小排序
du | sort -n -r  按照文件大小排序-反序
du | sort -n -r | head -n 3  按照文件大小排序-反序, 只显示前三行
du | sort -n -r | head -n 3 | cut -f2  按照文件大小排序-反序, 只显示前三行的第二列


使用正则表达式的命令
grep 显示文件中匹配关键字的行,用来从一个文件中找出匹配指定关键字的那一行,并送到标准输出。结合管道,我们通常用它来过滤搜索结果
locate -r "正则表达式" , 这个不会用
less 在/或?查找时使用\
vim 在查找或替换时
sed 
awk

bash处理*时,不认为它是一个字符,所以要用单引号,*叫通配符
echo * 显示文件名,*代表文件名
. 代表任意一个字符
*代表任意多个前面的字符,如a*, 任意多个a(0个,1个。。。n个)
.*任意多个任意字符
\脱意符,如\.    \* 匹配单独的.或*字符
^代表以。。。开头,如:^hi
$代表以。。。结尾,如:xl$
\以s开头,以k结尾
\
a\{18\} 重复a18次
^[abc]  以a或b或c开头的任意一个字符开头行显示出来
^[^a-t] 不是以a-t开头的字符
a?表示一个或-个单独的a
a+表示一个或多个a,如a,aa,aaa....

vi /usr/share/dict/words
超过40个字母的单词,  grep '.\{40,\}' !$
40-50个字母的单词,  grep '.\{40,50\}' !$
正好40个字母的单词,  grep '.\{40\}' !$
!$代表上一次执行的命令
i18n 国际化组织
grep '^i.\{18\}n$' /usr/share/dict/words

/etc/squid/squid.conf 没有这个目录啊????
grep -v '^#' /etc/squid/squid.conf
grep -v '^#' /etc/squid/squid.conf | grep -v '^$'
grep -v '^#' /etc/squid/squid.conf | grep -v '^$'  | wc -l

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29056818/viewspace-768518/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-07-18

  • 博文量
    60
  • 访问量
    115417