49彩票集团首页-49彩票集团官网|官网首页

49彩票集团让大家拥有最好的账号使用功能,49彩票集团是为大家带来更加方便的使用途径,是因为在49彩票集团娱乐的玩家们越来越多,发展成为最受欢迎的网上体育娱乐公司。

它的强大之处在于它不仅可以实现简单的查找

2019-10-05 作者:计算机网络   |   浏览(104)

《Linux探索之旅》全系列

数据处理

内容简介


  1. 第三部分测验题
  2. 第四部分第一课预告:压缩文件,解压无压力

上一课是 Linux探索之旅 | 第三部分第五课:延时执行,唯慢不破 。

grep命令:筛选数据

grep是Globally search a Regular Expression and Print的缩写,意思是《全局搜索一个正则表达式,并且打印》。

grep命令的功能简单说来是在文件中查找关键字,并且显示关键字所在的行。

grep命令极为强大,也是Linux中使用最多的命令之一。它的强大之处在于它不仅可以实现简单的查找,而且可以配合《正则表达式》来实现比较复杂的查找。

测试一下


1.wc命令做不到以下哪一项?

A. 统计单词数
B. 统计行数
C. 为文件内容排序

2.用grep命令搜索文本,何时需要用双引号包裹搜索的关键字?

A. 关键字超过10个字符
B. 关键字是正则表达式
C. 关键字包含空格

3.重定向符号>>,在文件不存在时,会创建文件吗?

A. 会
B. 不会

4.2>&1表示什么?

A. 使标准错误输出与标准输出重定向到同一个地方
B. 将标准错误输出重定向到文件
C. 忽略标准错误输出

5.command > /dev/null命令执行后,command的输出被重定向到哪里了?

A. /dev目录的null文件中
B. 垃圾箱中
C. 《黑洞》中,被丢弃,不会保留

6.以下的三个负载值是什么含义?0.07, 0.14, 0.12

A. 不同长短的时间段里的平均负载
B. 负载的最大,最小,和平均值
C. 每个处理器核心的负载

7.如何列出所有root用户运行的名字里包含gnome的进程?

A. ps -ef
B. ps -u root
C. ps -u root | grep gnome
D. ps -U root -p gnome

8.可以用什么方法来暂停一个进程?

A. Ctrl + Z
B. Ctrl + C
C. halt
D. nohup

9.如何将一个进程转到前台运行?

A. fg
B. bg
C. bc
D. top

10.我希望每个周末的每个整数的五分钟执行某个程序,应该怎么写?

A. /5 * *49彩票集团, * 0-1 command
B. */5 * * * 0,6 command
C. */5 * * * 5-6 command

grep的简单用法

grep的使用方法有很多种。但我们一开始先学习最基本的用法:

grep text file

可以看到,上面就是grep命令的最基本用法。

text代表要搜索的文本,file代表供搜索的文件。

我们用实际的例子来学习。比如我要在用户的家目录的 .bashrc 文件中搜索alias这个文本,而且显示所有包含alias的行。

grep alias .bashrc

grep命令列出了.bashrc文件中所有包含alias的行,并且在小编的终端中,以红色标出了每一个alias。其实grep更像是一个过滤器,它可以筛选出我们要找的对象。

如果我们要用grep命令在一个文件中查找用空格隔开的文本,那么就要加上双引号,例如:

grep "Hello World" file2

答案


  1. C
  2. C
  3. A
  4. A
  5. C
  6. A
  7. C
  8. A
  9. A
  10. B
常用参数
  • -i参数:忽略大小写,i是英语ignore的缩写,表示“忽略”。
grep -i alias .bashrc
  • -n参数:显示行号,n是英语number的缩写,表示“数字,编号”。
grep -n alias .bashrc
  • -v参数:只显示文本不在的行,v是invert的缩写,表示“颠倒,倒置”。-v参数的作用与正常grep的作用正好颠倒,就是只显示搜索的文本不在的那些行。
grep -v alias .bashrc
  • -r参数:在所有子目录和子文件中查找,r是英语recursive的缩写,表示“递归”。
    如果用了-r参数,那么grep命令使用时的最后一个参数(grep text file这个模式中的file)需要换成directory,也就是必须是一个目录。因为-r参数是让grep命令能够在指定目录的所有子目录和子文件中查找文本。
grep -r "Hello World" folder/

表示在folder这个目录的所有子目录和子文件中查找Hello World这个文本。当然了,以上例子中,folder后面的斜杠(/)不是必须的,这里只是为了清楚表明folder是一个目录。只要folder是一个目录,Linux系统是不会搞错的。

Linux中还有一个rgrep的命令,它的作用相当于grep -r

第四部分第一课预告


今天的课就到这里,一起加油吧!

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-05/143814.htm

49彩票集团 1

grep 的高级用法:配合正则表达式

我们首先来看一眼以下的这个表格,表格中列出了最常用的一些正则表达式的字符以及其含义:

特殊字符 含义
. 匹配除 "n" 之外的任何单个字符
^ 行首(匹配输入字符串的开始位置)
$ 行尾(匹配输入字符串的结束位置)
[] 在中括号中的任意一个字符
? 问号前面的元素出现零次或一次
* 星号前面的元素可能出现零次,一次或多次
+ 加号前面的元素必须出现一次以上(包含一次)
一根竖线 逻辑或
() 表达式的分组(表示范围和优先度)

首先,为了让grep命令知道我们要使用正则表达式,须要加上-E参数。例如:

grep -E Alias .bashrc

当然了,Linux也有一个命令egrep,其效果等同grep -E

不要怀疑,Alias也算是一个正则表达式,只不过没有用到上面表格中的特殊符号而已。
首先来看这个例子:

grep -E ^alias .bashrc

这个例子中,我们用到了这个特殊符号,上面的表格里对于已经做了说明:行首(匹配输入字符串的开始位置)。也就是说,^后面的字符须要出现在一行的开始。

49彩票集团 2

因此,就搜出了如上图中的三行,这三行都是包含alias,并且以alias开头的。

再来举几个例子:

grep -E [Aa]lias .bashrc

再比如:

grep -E [0-4] .bashrc

用于搜索包含0至4的任一数字的行。

grep -E [a-zA-Z] .bashrc

用于搜索包含在a至z之间的任意字母或者A至Z之间的任意字母的行。

其实在Ubuntu这样的Linux发行版中,grep如果要和正则表达式配合,不加-E参数也是可以的,正则表达式始终是激活的。不过有的Unix发行版的系统可能不加-E参数就不能搜索正则表达式,因此为了兼容,我们一般时候会说加上-E参数比较好。

sort命令:为文件排序

为了演示,我们首先用文本编辑器(可以用nano)来创建一个文件,名叫name.txt比如,然后在里面写入以下的行:

John
Paul
Luc
Matthew
Mark
jude
Daniel
Samuel
Job

然后进行 sort:

sort name.txt

sort命令将name.txt文件中的行按照首字母的英文字典顺序进行了排列,而且sort命令并不区分大小写。

-o参数:将排序后的内容写入新文件

如果你打开name.txt文件,你会发现,经过了sort命令的“洗礼”,name.txt中的内容还是维持原来的顺序。

单独使用sort命令是不会真正改变文件内容的,只是把排序结果显示在终端上。

那我们要存储排序结果到新的文件怎么办呢?可以用-o参数。

sort -o name_sorted.txt name.txt

可以看到,name.txt经过sort命令排序之后的内容被储存在了新的文件name_sorted.txt中,而name.txt的内容是不变的。

-r参数:倒序排列

-r参数中的r是reverse的缩写,是“相反,反面”的意思,与普通的仅用sort命令正好相反。

sort -r name.txt
-R参数:随机排序

-R参数比较“无厘头”,因为它会让sort命令的排序变为随机,就是任意排序,也许每次都不一样。但在有些时候,还是很有用的。

sort -R name.txt
-n参数:对数字排序

对数字的排序有点特殊。默认地,仅用sort命令的时候,是不区分首字符是否是数字的,因此还是按照1-9的顺序来排序。例如138会排在25前面,因为1排在2的前面。

那如果我们要sort命令识别整个数字,比如按照大小顺序来说,25应该排在138前面,那该怎么办呢?

就可以请出我们的-n参数了。n是number的缩写。是英语“数字”的意思。-n参数用于对数字进行排序,按从小到大排序。

wc命令:文件的统计

wc是word count的缩写,因此,wc命令貌似是用来统计单词数目的,但其实wc的功能不仅止于此。wc命令还可以用来统计行数,字符数,字节数等。

跟前面的命令一样,wc命令的用法也是后接文件名。wc命令很有用,应该会成为你经常用到的命令之一。

wc name.txt

49彩票集团 3

如果不加选项参数,那么wc命令的返回值有些特殊,有点晦涩难懂。

可以看到返回值是

9 9 50 name.txt

那么这三个数字:9,9,和50分别表示什么呢?

这三个数字,按顺序,分别表示:

  • 行数

  • 单词数

  • 字节数

因为我们之前创建name.txt时,每一行只有一个单词(英语名字),所以这里统计的行数和单词数都是9。

-l参数:统计行数

为了只统计行数,我们可以加上-l参数。l是英语line的缩写,表示“行”。

-w参数:统计单词数

w是英语word的缩写,word是英语“单词”的意思。因此-w参数用于统计单词。

-c参数:统计字节数

不知道为什么是c,因为byte或者octet(都可以表示《字节》)的首字母都不是c啊。不管了。也许c是character(英语“字符”的意思)的缩写吧。

-m参数:统计字符数

不知道为什么是m,因为character(英语“字符”)的首字母不是m啊。不管了。

uniq命令:删除文件中的重复内容

有时候,文件中包含重复的行。我们也许想要将重复的内容删除。

这时,uniq命令就显得很有用了。uniq是英语unique的缩写,表示“独一无二的”。

为了演示,我们创建一个文件repeat.txt(repeat是英语“重复”的意思),里面写入如下排序好的内容(因为uniq命令还是有点“呆”,因为它只能将连续的重复行变为一行):

Albert
China
France
France
France
John
Matthew
Matthew
patrick
Steve
Vincent

可以看到,有三个France连在一起,两个Matthew连在一起。

我们用uniq命令来处理看看:

uniq repeat.txt

最后结果是,三个连续的France只剩下一个了,两个连续的Matthew也只剩一个了。

但是uniq命令并不会改变原文件的内容,只会把处理后的内容显示出来。如果想将处理后的内容储存到一个新文件中,可以使用如下的方法:

uniq repeat.txt unique.txt
-c参数:统计重复的行数

-c参数用于显示重复的行数,如果是独一无二的行,那么数目就是1。

-d参数:只显示重复行的值
cut命令:剪切文件的一部分内容

cut命令用于对文件的每一行进行剪切处理。

-c参数:根据字符数来剪切

比如,我们要name.txt的每一行只保留第2至第4个字符。可以这样做:

cut -c 2-4 name.txt

流、管道、重定向

命令的输出可以有三个去向:

  • 终端

  • 文件

  • 其他命令的输入

到目前为止,我们只用过第一种形式:把命令的输出结果显示在终端。

>和>>:重定向到文件

我们先从最简单的开始。最简单的操作就是把命令的输出结果重定向到文件中,就不会在终端显示命令运行结果了。

在创建文件之前,我们来谈谈cut命令的进阶用法。

cut命令进阶:根据分隔符来剪切

首先,我们来看一种特殊的文件形式:CSV格式。

CSV是Comma Separated Values的缩写,翻成中文是《逗号分隔值》。

以下摘自百度百科:
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。
CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。
通常,所有记录都有完全相同的字段序列。

CSV文件的后缀名是.csv,通常可以被Excel等软件打开,打开之后会把分隔符隔开的各个数值填充到表格里。

我们来构建一个CSV文件。因为我们要用逗号作为分隔符,来学习cut命令的进阶使用:根据分隔符来剪切。

我们的CSV文件的内容可以如下,我们用Nano这样的文本编辑器来编写这个CSV文件,并且取名:notes.csv

Mack,95 / 100,很不错
Matthew,30 / 100,跟平时一样水
Louise,70 / 100,有进步
Luke,54 / 100,接近平均分了
John,68 / 100,不错,但还可以更好
Samuel,100 / 100,总是那么完美
David,40 / 100,退步挺大呀

如上图所示,我们的notes.csv文件中每一行由三部分组成,每部分由一个逗号分隔:

  • 学生名字

  • 成绩(满分是100分)

  • 评语

现在假如我们要从notes.csv文件中提取名字那一列,怎么办呢?我们不能用cut命令的-c参数啊,毕竟每个名字的字符数不相等。

我们看到文件中每一行的每一部分是用分隔符来隔开的,所以我们可以这样做:

需要用到两个参数:

  • -d参数:d是delimiter的缩写,是英语《分隔符》的意思。用于指定用什么分隔符(比如逗号,分号,双引号等等)。

  • -f参数:f是field的缩写,是英语《区域》的意思。表示剪切下用分隔符分隔的哪一块或哪几块区域。

我们的notes.csv文件是用逗号来分隔三个部分的,我们要剪切下来的是名字那一列,也就是第一部分。因此我们可以这样使用:

cut -d , -f 1 notes.csv

那如果我们只想剪切下评语部分呢?评语是第三部分:

cut -d , -f 3 notes.csv

那如果我们要第一和第三部分呢?可以这样:

cut -d , -f 1,3 notes.csv

同样地,我们可以用

cut -d , -f 2- notes.csv 

来剪切第二部分直到最后的内容。

好了,现在准备工作做好了,我们可以来学习重定向流符号了。

>:重定向到新的文件
我们知道虽然我们刚才用cut命令从notes.csv文件中剪切出来一些部分,但原始的notes.csv文件是不变的。

我们现在想要将剪切出来的部分储存到一个文件中,而不是像之前那样显示在终端里。

(为了方便,我们在家目录下新建一个redirect目录,将之前的notes.csv文件放到这个目录下,再用cd redirect命令定位到这个目录)

这个符号可以将命令的输出结果重定向到你自己选择的文件中。例如:

cut -d , -f 1 notes.csv > students.txt

有时候,我们既不想将命令的输出显示在终端,又不想将其储存到文件中,怎么办呢?

Linux中有一个俗称《黑洞》的文件,就是

/dev/null

/dev/null 文件是特殊文件,不是一个目录。此文件具有唯一的属性:它总是空的。它能使发送到/dev/null 的任何数据作废,就好像这些数据掉进了无底的黑洞一般。

因此,假如我们不需要在终端显示刚才那个cut命令的结果,也不想存储到文件里,那么可以这么做:

cut -d , -f 1 notes.csv > /dev/null

>>: 重定向到文件末尾
我们已经知道,单独一个>符号可以实现重定向到新的文件(覆盖文件内容),那么两个连在一起的>符号有什么作用呢?

>>的作用与>是类似的,不过它不会像>那么危险(如果文件已经存在,>符号会覆盖文件内容),而是将重定向的内容写入到文件末尾,起到追加的作用。如果文件不存在,也会被创建。

我们就来实践一下:

cut -d , -f 1 notes.csv >> students.txt

因为我们上一个例子中已经用>符号来重定向名字那列的内容到students.txt文件中了,所以上面的命令会追加同样内容到students.txt的末尾。

>>符号在很多情况下非常有用,比如你人不在电脑前,而你又想让终端为你记录程序运行的结果,就可以在一个日志文件的末尾一直写入。例如:

command >> results.log
2>,2>>,2>&1:重定向错误输出

我们首先来学点新知识。

stdin,stdout,stderr:标准输入,标准输出,标准错误输出

对于我们的终端命令行,我们从键盘向终端输入数据,这是标准输入,也就是stdin。

终端接收键盘输入的命令,会产生两种输出:

  • 标准输出:stdout。指终端输出的信息(不包括错误信息)。

  • 标准错误输出:stderr。指终端输出的错误信息。

第一个stdout就是我们到目前为止看到的那些Linux命令的正常运行结果,比如在终端中运行ls命令,我们以前也看到了它列出当前目录下所有文件。

这三个你也可以把它们看作流:

  • stdin:标准输入流。英语standard input的缩写(standart是英语“标准”的意思,input是英语“输入”的意思)。标准输入是指输入至程序的数据(通常是文件)。程序要求以读(read)操作来传输数据。并非所有程序都要求输入。如dir或ls程序运行时不用任何输入。 除非重定向,输入是预期由键盘获取的。 标准输入的文件描述符为 0

  • stdout:标准输出流。英语standard output的缩写(output是英语“输出”的意思)。标准输出是指程序写输出数据的流。程序要求数据传输使用写的运算。并非所有程序都要求输出。如mv或ren程序在成功完成时是没有输出的。 除非重导向,输出是预期显示在终端上的。 标准输出的文件描述符为 1 (一)。

  • stderr:标准错误输出流。英语standard error的缩写(error是英语“错误”的意思)。标准错误输出是另一个输出流,用于输出错误消息或诊断。它独立于标准输出,且标准输出和标准错误输出可以分别被重定向。标准错误输出的文件描述符为 2 (二);

文件描述符 名字 解释
0 stdin 标准输入
1 stdout 标准输出
2 stderr 标准错误输出

那什么是文件描述符呢?

文件描述符的英语是File Descriptor,简称fd。

文件描述符是一个用于表述指向文件的引用的抽象化概念。这定义本身也有点抽象。我们不需要太深入了解。大致只需要知道:

  • 文件描述符在形式上是一个非负整数。
  • 实际上,它是一个索引值,指向操作系统内核为每一个进程所维护的该进程打开文件的记录表。
  • 当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。

文件描述符通常是Unix,Linux等系统的概念。在Windows中,也有类似的概念,但是Windows中称为《句柄》,就是handle。

其实,>和>>符号只是将标准输出重定向到文件,并不能将标准错误输出重定向到文件。
那么我们要重定向标准错误输出,该怎么办呢?

我们就要用到 2> 这个符号
为什么是2呢?记得上面说的吗?标准错误输出的文件描述符是2,所以这里的2表示标准错误输出。如果没有2,单独的>符号就是重定向标准输出(文件描述符为1)。

cat not_exist_file.csv > results.txt 2> errors.log

这个命令里有两个重定向:

>: results.txt:将标准输出重定向到results.txt文件中。

2>: errors.log:将标准错误输出重定向到errors.log文件中。

类似地,2>>符号用于将标准错误输出重定向到文件末尾。

合并输出
上面我们学习了如何将标准输出和标准错误输出分别重定向到不同文件。但是有的时候,我们比较“任性”,我们就想把标准输出和标准错误输出都重定向到同一个地方。怎么做呢?

须要使用 2>&1 这个组合符号。

看着怪怪的对吧?由四个字符组成。这个符号的作用是:将标准错误输出重定向到与标准输出相同的地方。

我们用实例演示一下:

cat not_exist_file.csv > results.txt 2>&1

上面的命令的作用是:将cat not_exist_file.csv这个命令的所有输出(标准输出和标准错误输出)都重定向到results.txt文件中。

如上图所示,运行cat not_exist_file.csv > results.txt 2>&1命令之后,因为not_exist_file.csv这个文件不存在,但又因为加了2>&1这个符号,所以标准输出(为空)和标准错误输出(cat: not_exist_file.csv: No such file or directory)都重定向到results.txt文件中了。

大家是否觉得要将标准输出和标准错误输出都重定向到文件末尾,应该是这样写:2>>&1 呢?

其实不然,这样是不对的。我们还是保持2>&1这个组合不变,只改变前面的符号就行了。例如:

cat not_exist_file.csv >> results.txt 2>&1
<,<<:从文件或键盘读取

到目前为止,这一课我们只讲了如何重定向命令的输出,也就是决定命令输出的信息的去向。那么接着我们可以做一点相反的事情:决定命令的输入来自哪里。

当然了,上面也说了,不是所有的命令都有输入,也不是所有的命令都有输出。

到目前为止,我们的命令的输入都来自于后面接的参数,这些参数有些是文件名,有些是目录名,等等。

但我们其实可以使命令的输入来自于文件或者键盘输入。如下图所示:

<:从文件中读取

我们用一个简单的例子来演示:

cat < notes.csv

如上图所示,cat < notes.csv的运行结果和cat notes.csv (不用重定向流符号)一模一样,都是在终端打印notes.csv的内容,那我们为什么需要<符号呢?

事实上,虽然cat < notes.csv的运行结果和cat notes.csv一样,但是原理却不一样:

  • cat notes.csv :这种情况下,cat命令接受的输入是notes.csv这个文件名,那么它要先打开notes.csv文件,然后打印出文件内容。

  • cat < notes.csv :这种情况下,cat命令接受的输入直接是notes.csv这个文件的内容,cat命令只负责将其内容打印。而打开文件并将文件内容传递给cat命令的工作则交给shell程序(也就是控制终端的程序)来完成。

所以,虽然结果看似一样,但是中间的过程却是不一样的。

<<:从键盘读取

<<符号的作用是将键盘的输入重定向为某个命令的输入,很多情况下都很有用。

我们用实例来说明:

sort -n << END

如上图所示,输入这条命令之后,回车,终端就进入了键盘输入模式。

我们知道sort -n的作用是按照从小到大进行排列。那么我们就输入一些数值吧(每输一个数值,用回车键来换行,接着输入下一个数值,输入END来结束输入,END被称为结束字符串。当然了,你可以用其他字符串,比如haha,nihao,不一定要用END。

49彩票集团 4

可以看到,sort -n命令将我们输入的一串数值进行了由小到大的排序。

我们再试试其他命令与<<符号的配合,这次我们用wc命令吧,wc命令用于统计字符等,如果配合-m参数就是统计字符数。

wc -m << END

49彩票集团 5

可以看到,《How many characters are there in this sentence ?》这句话中有49个字符。

当然了,我们也可以将之前学习的输出重定向符号和这一节的输入重定向符号结合使用:

sort -n << END > numbers_sorted.txt 2>&1

以上命令将sort -n命令对数值排序的结果都输入到numbers_sorted.txt文件中,如果有错误信息也输入。

本文由49彩票集团发布于计算机网络,转载请注明出处:它的强大之处在于它不仅可以实现简单的查找

关键词:

  • 上一篇:没有了
  • 下一篇:没有了