outlook可以显示多少行文本_Linux学习从处理文本开始
在Linux世界一切皆文件,而且绝大多数都是文本文件。Shell是强大的用户界面,其强大之处在于Shell中自带了大量的文本处理工具,而且这些工具可以通过通道串联起来形成流式处理线。这些命令使执行文本处理分析,在不同格式,过滤器行之间转换数据等工作变得轻而易举。
*nix界的一个哲学是"专心做好一件事"。
处理文本时候,基本做法是将遇到的复杂问题化整为零,化繁为简分解为一系列较小的问题,然后使用专门工具解决之。
得Linux者得天下,得Shell者得Linux,要得Shell首先要搞会文本处理工具(命令)。本文中虫虫给大家介绍Shell中常见的文本处理命令。这些命令中的每一个都旨在解决一个小问题。但是,可以结合他们完成现实中绝大多数的任务。本文首先介绍常见基本命令(工具)的使用方法,第二部分介绍一些结合这些命令的实际处理例子。本文旨在抛砖引玉,对于每一个工具的详细用法,建议man一下他们的帮助文档,这才是实际使用中最普遍的做法。
基本命令
cat
cat命令是我们最常用的工具,用于打印文件的内容在屏幕上,支持多个文件。
head
head打印文件中的头部,默认为前10行,可以通过-n 加一个数字制定需要打印的行数。对一个大文件数据,只看文件的一部分内容用head非常有用,而且可以高性能快速显示。
head -n 2 host-info.sh
#!/bin/bash
tail
tail和head相反,打印文件中的最后n行。如果不制定-n参数默认为最后10行。tail在分析日志文件时候最常用,因为最新的日志都是附加到日志文件后面的。
tail host-info.sh
echo "---------可用内存------------------------------------------"free -mecho -e ""echo "---------磁盘信息------------------------------------------"df -hecho -e ""echo "---------内核版本-------------------------------------------"uname -aecho -e ""echo "------------------------------------------------------------"
如果要打印位于第n行(包括在内)之后的文件中的所有行,则可以使用-n +数字为参数,表示打印数字行后的所有内容。
tail -n +17 host-info.sh
echo -e ""echo "------------------------------------------------------------"
由于脚本文件有18行,因此tail -7 +42仅在文件中打印第17行和第18行。
同时-n后也可以加负数整数,表示从后算起多少行,比如
tail -n -2 host-info.sh的内容和tail -n +17 host-info.sh打印的内容一样。
tail还有一个最常见的选项是-f或--follow显示文件中的最后10行,并实时显示当前写入文件的内容。要实时查看日志文件内容时候用tail -f
less
less 可以对文件和输入流的文本以分页形式显示。并且支持通过空格、上下健在显示内容间移动。并且支持一些一些vim中的操作比如g和GG移动到开头和结尾,使用/和?加关键字搜索。
对应的,可能很多人爱用的more命令,对比cat、 more和less用法,见下表:
wc
wc 用来用统计字符、单词和行计数,支持文件或输入流统计。
-c 表示统计字符:
wc -w host-info.sh
36 host-info.sh
-w表示单词:
wc -w host-info.sh
36 host-info.sh
-l表示行数:
wc -l host-info.sh
18 host-info.sh
不指定参数,会统计三个数:
wc host-info.sh
18 36 559 host-info.sh
如果文本数据通过管道输入或重定向到,则仅只会显示统计数。
cat host-info.sh |wc -l
18
wc -l < host-info.sh
18
cut
cut用来剪切出(按列)文件或者输入流文本的一部分。cut通过使用选项-d定义边界字符(将两列分隔),用-f选项加数字表示需要显示的列。
下面的命令,提取nginx访问日志第三列内容。
cut -d - -f 3 access.log
-f 选项支持设定多列,比如-f 1,3选项显示第一列和第三列:
cut -d - -f 1,3 access.log
paste
paste 用来将两个不同的文件合并到一个多列文件中。
默认情况下,paste使用制表符(/t)分隔符,可以使用-d选项设定。
paste的一种常见用法是paste使用给定的定界符(使用-s和-d参数的组合)来连接流或文件中的所有行,相当于对行反转。
paste -s -d: tiangan
甲:乙:丙:丁:戊:己:庚:辛:壬:癸
如果-指定为输入文件,表示从stdin读取。
cat dizhi|paste -s -d: -
子:丑:寅:卯:辰:巳:午:未:申:酉:戌:亥
sort
sort,对参数文件或输入进行排序。
sort tiangan
注意中文排序用的汉字unicode编码顺序(10天干中文unicode码为甲乙丙丁戊己庚辛壬癸)
sort -r 执行反向排序。
sort -n 通过按字段的算术值对它们进行排序来执行数字排序。
cat number
10
11
1112
93
23
5
6
7
8
9
sort number
10
11
1112
23
5
6
7
8
9
93
sort -n number
5
6
7
8
9
10
11
23
93
1112
大家看出来区别了么。
uniq
uniq 对文件或输入流中相同的行进行合并。
cat number1
1
3
1
5
6
1
2
1
uniq number1
1
5
6
1
2
1
可以注意到uniq只能合并相邻的相同行,所以结果中并不是把所有内容为1的行都合并了。要合并文件中所有的行,首先应该对行内容进行排序,保证相同的行都在一起
sort number1|uniq
1
2
5
6
-c选项,用来统计合并相同行的次数。
sort number1|uniq -c
5 1
1 2
1 5
1 6
uniq -u 仅在其输入中显示唯一行。
sort number1|uniq -u
2
5
6
实际中uniq常结合sort使用与结合使用来处理文本文件,来去除日志文件的重复行。
tr
tr代表translation,它执行一对一替换将目标字符代替为替换字符。它适用于字符或字符类,例如小写字母,可打印字符,空格,字母数字等。
tr 将所有出现的事件从其标准输入转换为。
echo 'Chongchong is Number One!' | tr o OChOngchOng is Number One!
tr也可以使用[:class:] 符号来翻译字符类,比如:
[:space:] 代表所有类型的空格。下面命令把空格替换为,。
echo 'Chongchong is Number One!' | tr '[:space:]' ','Chongchong,is,Number,One!,%
注意,%输出末尾的字符表示缺少结尾的换行符。上一行的换行符也被转换为逗号。
[:lower:]表示小写字母,对应的[:upper:]表示大写字母。所以大小转换可以用下命令:
echo 'Chongchong is Number One!' | tr '[:lower:]' '[:upper:]'CHONGCHONG IS NUMBER ONE!echo 'Chongchong is Number One!' | tr '[:upper:]' '[:lower:]'chongchong is number one!
tr -c SET1 SET2将不在SET1中的字符转换为SET2中的字符。以下示例将所有非元音替换为空格。
echo 'Chongchong is Number One!' | tr -c '[abc]' ' 'c b %
tr -d删除匹配的字符,而不是替换它们。等价于tr ' '。
echo 'Chongchong is Number One!' | tr -d '[:lower:]'C N O!
tr也可以使用符号替换字符范围,例如a和e之间的所有字母 ,或1和8之间的所有数字 s-e,其中s表示起始字符,e表示结束字符。
echo 'Chongchong is Number One!' | tr 'a-e' 'x'Chongxhong is Numxxr Onx!echo "5cja l3488 5p34oi" | tr '1-4' 'x'5cja lxx88 5pxxoi
tr -s string1将任何多次出现的字符合并为一个。常用于清除字符串中多余的空格。
echo 'Chongchong is Number One!' | tr -s ' 'Chongchong is Number One!
fold
fold以指定的宽度,折截文本显示,例如确保文本适合较小尺寸的显示。
fold -w n在n字符处截断。
paste -s tiangan |fold -w 20
甲 乙 丙丁 戊己 庚辛 壬癸
-s选项旨在空格字符时候才会截断。
paste -s tiangan |fold -s -w 20甲 乙丙 丁戊 己庚 辛壬 癸
grep
grep是文本行过滤的瑞士军刀,文本处理三剑客之一(grep ,sed,awk)。它对给定的模式进行行匹配过滤,支持正则表达式。
grep查找host-info.sh文件中出现echo的行:
grep echo host-info.shecho "---------主机名--------------------------------------------"echo -e ""echo "---------系统信息------------------------------------------"echo -e ""echo "---------可用内存------------------------------------------"echo -e ""echo "---------磁盘信息------------------------------------------"echo -e ""echo "---------内核版本-------------------------------------------"echo -e ""echo "------------------------------------------------------------"
grep对文件进行搜索,也可以对管道传递的文本流进行搜索。所以,可以链接多个grep命令以进一步过滤文本。
grep echo host-info.sh|grep "-e"
echo -e ""echo -e ""echo -e ""echo -e ""echo -e ""
grep -v执行反向匹配,它会去掉和模式匹配的行,显示不匹配的行。
grep -v echo host-info.sh
#!/bin/bashhostnamectluptimefree -mdf -huname –a
grep -i执行不区分大小写的匹配。
grep -l 仅列出包含匹配项的文件。
grep -l echo host-info.shhost-info.sh
grep -c 统计找到模式的次数。
grep -c echo host-info.sh11
grep -r 在当前工作目录及其下的所有子目录中递归搜索文件。
grep -w 只匹配整个单词。
sed
sed是一种非交互式流式编辑器,文本三剑客的老二。用于逐行地对其输入流执行文本转换。它可以从给出的文件或者管道中输入内容,并将结果输出。
sed命令的格式:
[address[,address]]function[arguments]
虽然sed可以执行许多功能,此处,我们仅介绍文本替换,这是sed最常用的方法。
一个sed替换命令如下:
s/样式/替换/[选项]
我们替host-info.sh中的echo为print:
sed 's/echo/print/g' host-info.sh
g(对于global)选项表示替换每一行中所有出现模式。
如果替换模式的搜索中包含/,sed可以让我们自定义指定其他分隔符/,比如
sed 's#echo#print#g' host-info.sh
通过指定地址,可以告诉sed在制定的行范围,地址范围可以用,,其中可以是一个行号或用$表示文件的最后一行,实施替换,比如:
sed '2s#echo#print#g' host-info.shsed '2,$s#echo#print#g' host-info.sh
默认情况下,将sed其结果显示在中stdout,但可以使用该-i选项编辑原始文件。
awk
awk文本三剑客的老幺,不仅仅是文本处理工具,也是一门强大的编程语言。awk真正擅长的事情,是将文件拆分为多个列,当文件中包含空格和制表符的混合匹配时,非常有用。
awk '{print $1}' host-info.sh
打印host-info.sh脚本中的第一列
#!/bin/bashechohostnamectlechoechouptimeechoechofreeechoechodfechoechounameechoecho
ps aux|awk '{print $NF,$1,$4}'
用来显示系统当前执行进程的执行命令、CPU和内存占有量,其中$NF表示打印最后一列。
实例展示
显示当前连接的tcp各个状态的连接数
netstat -nat|awk '{print $NF}'|sort|uniq -c
1 CLOSE_WAIT
1 established)
344 ESTABLISHED
33 LISTEN
1 State
22 SYN_SENT
131 TIME_WAIT
这是网络服务器网络调试中最常用的命令之一,各个状态连接数及其比例往往反应一台服务器业务处理情况。如果服务配置,内核参数上有问题,或者服务器遭受攻击等都可以通过这些状态连接数反应出来。
打印某个网卡的IPv4地址
ifconfig eth0 | grep -v inet6 | grep inet | awk '{ print $2 }'
172.26.70.166
也可以用ip命令:
ip addr show eth0 | grep -v inet6 | grep inet | awk '{ print $2 }'
172.26.70.166/20
注意ip和ifconfig在显示上略有区别,ip命令结果中把Ip和掩码用位形式显示。
上述命令中先grep -v去除了ipv6的地址信息,然后筛选inet(ipv4)的行,然后打印第二列就是ip地址。我们也可以不用grep用awk直接筛选得出结果:
ifconfig eth0 | awk '$1=="inet" {print $2 }'
172.26.70.166
从配置文件中提取值
grep 'editor =' ~/.gitconfig | cut -d = -f2 | sed 's/ //g'
/usr/bin/vim
我们editor =在当前用户的git配置文件中查找该值,然后用=分割cut结果,获得第二列,并删除该列两边的任何空格。提取的依次显示过程如下:
grep 'editor =' ~/.gitconfigeditor = /usr/bin/vimgrep 'editor =' ~/.gitconfig | cut -d'=' -f2/usr/bin/vimgrep 'editor =' ~/.gitconfig | cut -d'=' -f2 | sed 's/ //'/usr/bin/vim
从日志文件中提取IP地址
统计nginx访问日志中,User agent为"Java/1.8.0-internal"(可能为非法爬虫或者Ddos攻击源)并显示10个最大的IP。
grep "Java/1.8.0-internal" access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -n 10
151 223.66.200.51
147 112.22.74.208
139 112.3.166.207
126 112.21.232.255
114 112.3.3.214
82 183.210.64.184
73 183.208.146.114
65 183.208.137.129
56 223.107.62.108
44 183.210.71.48
重命名源文件中的函数
假设我们正在一个代码项目中,并且想在代码文件中重命名一个名字不佳的函数(或类,变量等)。我们可以通过使用来执行此操作sed -i,该命令在文件中执行就地替换。
cat app.py
def bool_from_str(s):if s.isdigit():return int(s) == 1return s.lower() in ['yes', 'true', 'y']
sed -i 's/def bool_from_str/def is_affirmative/' izk/utils.py
cat app.pydef is_affirmative(s):if s.isdigit():return int(s) == 1return s.lower() in ['yes', 'true', 'y']
但是,在定义该文件的文件中重命名了此函数。include的任何其他文件现在bool_from_str也都被替换了。
总结
所有这些工具都打开了无限的可能,可以为我们提取数据并转换其格式,从而有可能构建命令的整个工作流。这些命令中的每一个都具有相对较小的功能(sort排序,cat连接,grep过滤,sed编辑,cut剪切等)。
然后,任何给定的涉及文本的任务都可以简化为一系列较小的任务,每个任务执行一个简单的动作并将其输出传递到下一个任务中。
更多shell编程和处理的文档可以参考ABS《高级Bash脚本编程指南》一书。
outlook可以显示多少行文本_Linux学习从处理文本开始相关推荐
- CSS Repeater - 交错显示行背景色 table行鼠标进入事件特效 禁止文本换行
1. 禁止文本换行的CSS: white-space:nowrap; strict mode下在IE7和FF中都正常,以前IE用的word-break.word-wrap属性对FF无效. 2. ...
- js文本内容显示6行,超出6行出现显示更多按钮,css样式超出行数只能使用...去替代
js处理文本内容显示6行,超出6行出现显示更多按钮,对于网上说的css样式处理,基本上都是超出6行使用-去处理,不符合需求,先看结果,再看需求:如下 先看实现结果,如下图所示: 需求:产品经理提出详情 ...
- 从零开始前端学习[11]:控制文本显示的样式属性
控制文本显示的样式属性 text-align 文字水平显示方式 line-height 文字垂直显示方式 text-decoration 文本的修饰方式 text-indent 文本的缩进方式 let ...
- outlook不显示发件箱_更改Outlook 2007以在发件人上方显示主题行
outlook不显示发件箱 If you'd rather see the subject line as the top line when using the condensed view in ...
- LINUX学习-在LCD上显示多行文字
本节主要实现的功能是在lcd上显示两行文字. 主要实现了两种 1.靠左侧上方显示 2.居中显示 两种的实现方法大同小异,主要的不同实在确定描字符时的源点. 一.靠左显示时,确定源点的方法 显示第一行文 ...
- CSS行高、字体简写属性、文本样式学习笔记
目录 一 行高 二 字体的简写属性 三 文本的样式 一 行高 行高:line-height,指的是文字占有的实际高度,可以通过line-height设置行高. 行高可以直接指定一个大小,单位可以是px ...
- 【NLP】相当全面:各种深度学习模型在文本分类任务上的应用
论文标题:Deep Learning Based Text Classification:A Comprehensive Review 论文链接:https://arxiv.org/pdf/2004. ...
- 乐行学院RabbitMQ学习教程 第一章 RabbitMQ介绍(可供技术选型时使用)
乐行学院RabbitMQ学习教程 第一章 RabbitMQ介绍 RabbitMQ介绍 1.RabbitMQ技术简介 2.RabbitMQ其他扩展插件 2.1监控工具rabbitmq-managemen ...
- 《Linux命令行大全》学习笔记2——配置与环境
文章目录 前言 一.环境 环境中都保存了什么 如何建立环境 启动文件 修改环境 二.vi 入门 编辑模式 基本编辑 搜索和替换 编辑多个文件 保存工作 三.定制提示符 分解提示符 换一种提示符 增加颜 ...
最新文章
- 在Ubuntu 14.04 64bit上编译并研究State Threads网络线程库源码
- 局部保留投影(LPP)推导
- 2011-09-07 00:16 ubuntu 如何修改当前用户名
- mysql编码转换工具_mysql编码转换搞定
- 任务调度之Timer、TimerTask
- html实现平面地图效果,HTML5 光点组成的平面和立体世界地图
- Filenet公布第二批打包节点竞选名单
- DateFormat的使用
- 【网络营销】CPA、CPS、CPM、CPT、CPC 是什么
- 电脑怎么截图,4种简单常用的截图方法
- jQuery的文档处理
- [IOS][已越狱]配合网易云音乐,使用Bridge快速免iTunes导入音乐到“音乐”
- PSO粒子群算法微电网优化调度(微电网孤岛运行优化调度)matlab程序
- Linux线程同步与Windows线程同步
- zen cart产品分类及产品管理
- Adobe 及 Acrobat Reader 下载链接(FTP)
- AIGC/ChatGPT这么火,相关的AI产品岗,真的有变多吗?_最新AI产品经理求职动态(28)...
- 硬件描述语言VHDL之并行语句基本使用介绍
- 开源免费erp ,erp5和odoo的对比
- ubuntu linux下制作win10启动盘
热门文章
- 【clickhouse】Clickhouse 查询之 Array JOIN
- 95-240-040-原理-State-简介
- 【Presto】http-worker-103	com.facebook.presto.execution.SqlTaskManager	Switching coordinator affinity
- mac安装cmake
- 使用eclipse遇到的unable to install breakpoint的问题
- Eclipse下,LogCat(deprecated),显示不了内容,或者全部都是Unknown
- 广东省计算机考试图片大小,广东省计算机等级考试(20190423051419).doc
- SpringBoot + SpringBatch + Quartz整合定时批量任务
- Redis精进:List的使用和应用场景
- linux jsp连接mysql_Linux JSP连接MySQL数据库