处理Linux中的文本流

1. 环境

vim ahappychild.txt
My hose is red - a little house;
A happy child am I.
I laugh and play the whole day long,
I hardly ever cry.
I have a tree, a green, green tree,
To shade me from the sun;
And under it I often sit,
When all my play is done.

vim sortuniq.txt 
Canepa,Gabriel:20140808:15
Doe,John:20140325:30
Null,Dave:20141009:5
Doe,John:20140324:30
Null,Dave:20140709:5
Canepa,Gabriel:20140808:15
Doe,John:20140311:30
Null,Dave:20141009:5
Doe,Jane:20140510:10
Canepa,Gabriel:20140608:15
Doe,john:20140324:30

2. sed

1. 将小写y替换成大写Y,输出到ahappychild2.txt
sed 's/y/Y/g' ahappychild.txt > ahappychild2.txt

2. 我们要用一个符号来替换一个文字,与此同时我们将把一行最开始出现的第一个 I 替换为 You。
如果要在替换文本中搜索或者替换特殊字符(如 /,\,&),需要使用反斜杠对它进行转义。
sed 's/and/\&/g;s/^I/i/g' ahappychild.txt

3. 将会显示 /var/log/messages 中从12月13日开始的头五行。
sed -n '/^Dec 13/p' /var/log/messages|sed -n 1,5p

4. 取消开头注释和空行
sed '/^#\|^$/d' /etc/selinux/config

3. uniq

uniq 命令允许我们返回或者删除文件中重复的行,默认写到标准输出。我们必须注意到,除非两个重复的行相邻,否则uniq 命令不会删除他们。因此,uniq 经常和一个前置的 sort 命令(一种用来对文本行进行排序的算法)搭配使用。默认情况下,sort 使用第一个字段(用空格分隔)作为关键字段。要指定一个不同的关键字段,我们需要使用 -k 选项。

1. 查看linux每天产生的日志数
cat /var/log/messages |uniq -c -w 6

2. 查询有多少个捐赠者
cat sortuniq.txt |cut -d: -f1|sort|uniq

4. tr

tr 命令可以用来从标准输入中转换(改变)或者删除字符,并将结果写入到标准输出中。

1. 小写变大写
cat sortuniq.txt | tr [:lower:] [:upper:]

2.输出中的分隔符为一个空格。
cd /
ls -l |tr -s ' '

5. cut

1. 从 /etc/passwd 中提取用户账户和他们被分配的默认 shell(-d 选项允许我们指定分界符,-f 选项指定那些字段将被提取)。
cat /etc/passwd |cut -d: -f1,7

6. 综合实例

1. 能过last查询root用户的IP登陆情况(去重)
last|grep root|tr -s ' '|cut -d' ' -f1,3|sort -k2|uniq -c
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。