每天2个Linux命令 grep wc


2017-07-30 每天2个Linux命令 grep命令

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)

是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

(1)用法:

  用法:  grep [选项]... PATTERN [FILE]...

(2)功能:

  功能:  在每个 FILE 或是标准输入中查找 PATTERN。

(3)选项参数:

  1) -V, --version           显示版本号

  2) -i                在匹配过程中忽略大小写

  3) -v, --invert-match         显示不匹配的行 

  4) -f                指定文件中存的每行字符串作为匹配字符串

  5) -c                统计每个文件中包含指定字符串的行数

  6) --color=auto            标记匹配颜色

  7) -E                  将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式

  8) -q                 grep静默输出,常用来测试。

(4)实例:

  1)[root@localhost grepDir]# grep "MenAngel" t1.txt t2.txt t3.txt          在特定的文本集中查找特定字符串

复制代码
[root@localhost grepDir]# cat >t1.txt
I'm MenAngel!
Although I'm still a poor student right now,I believe that someday 
I will be one of the successful man in the world!
^Z
[3]+  已停止               cat > t1.txt
[root@localhost grepDir]# cat >t2.txt
Every one fights for a better future,but I fight for freedom!                     
^Z
[4]+  已停止               cat > t2.txt
[root@localhost grepDir]# cat >t3.txt <<EOF
> There is no one hoping that you will succeed when you are been looking down upon,but
>  if you succeeded,they will look down upon themselves!
> When you get an important thing,you will find that it is not so precious as you 
> like,but when you lose it after that,it will become so precious as you liked.
> EOF
[root@localhost grepDir]# grep "MenAngel" t1.txt t2.txt t3.txt
t1.txt:I'm MenAngel!

2)[root@localhost grepDir]# grep -v “MenAngel” t1.txt t2.txt t3.txt        输出指定字符串所在行之外的所有文件的行内容

[root@localhost grepDir]# grep -v "MenAngel" t1.txt t2.txt t3.txt
t1.txt:Although I'm still a poor student right now,I believe that someday I 
will be one of the successful man in the world!
t2.txt:Every one fights for a better future,but I fight for freedom!
t3.txt:There is no one hoping that you will succeed when you are been looking down upon,
but if you succeeded,they will look down upon themselves!
t3.txt:When you get an important thing,you will find that it 
is not so precious as you like,but when you lose it after that,it will become so precious as you liked.

3)[root@localhost grepDir]# grep “fight” t1.txt t2.txt t3.txt –color=auto      将查找的字符串用特定的颜色标记出来

[root@localhost grepDir]# grep "fight" t1.txt t2.txt t3.txt --color=auto
t2.txt:Every one fights for a better future,but I fight for freedom!

4)[root@localhost grepDir]# grep -c “that” t1.txt t2.txt t3.txt            统计每个文件中包含指定字符串的行数

[root@localhost grepDir]# grep -c "that" t1.txt t2.txt t3.txt
t1.txt:1
t2.txt:0
t3.txt:2

5)[root@localhost grepDir]# grep -n “that” t1.txt t2.txt t3.txt           默认情况,输出包含特定字符串所在的行

复制代码
[root@localhost grepDir]# grep -n "that" t1.txt t2.txt t3.txt
t1.txt:2:Although I'm still a poor student right now,I believe that someday 
I will be one of the successful man in the world!
t3.txt:1:There is no one hoping that you will succeed when you are been looking down upon,
but if you succeeded,they will look down upon themselves!
t3.txt:2:When you get an important thing,you will find that it is not so precious as you like,
but when you lose it after that,it will become so precious as you liked.
[root@localhost grepDir]# grep "that" t1.txt t2.txt t3.txt
t1.txt:Although I'm still a poor student right now,I believe that someday 
I will be one of the successful man in the world!
t3.txt:There is no one hoping that you will succeed when you are been looking down upon,
but if you succeeded,they will look down upon themselves!
t3.txt:When you get an important thing,you will find that it is not so precious as you like
,but when you lose it after that,it will become so precious as you liked.

6)[root@localhost grepDir]# cat t1.txt t2.txt t3.txt|grep “MenAngel”        配合cat命令查看文件中指定字符串所在行的内容

[root@localhost grepDir]# cat t1.txt t2.txt t3.txt|grep "MenAngel"
I'm MenAngel!
[root@localhost grepDir]# grep "MenAngel" t1.txt t2.txt t3.txt
t1.txt:I'm MenAngel!

7)[root@localhost grepDir]# cat t1.txt t2.txt t3.txt|grep ^I             查找以指定字符串开头的文本行并输出

[root@localhost grepDir]# cat t1.txt t2.txt t3.txt|grep ^I
I'm MenAngel!
[root@localhost grepDir]# cat t1.txt t2.txt t3.txt|grep ^M  //没有以M开头的
[root@localhost grepDir]# 

8)[root@localhost grepDir]# cat t1.txt t2.txt t3.txt|grep ^[^I]           
经不以指定字符串开头的文本所在行的内容输出

[root@localhost grepDir]# cat t1.txt t2.txt t3.txt|grep ^[^I]
Although I'm still a poor student right now,I believe that someday
 I will be one of the successful man in the world!
Every one fights for a better future,but I fight for freedom!
There is no one hoping that you will succeed when you are been looking down upon,
but if you succeeded,they will look down upon themselves!
When you get an important thing,you will find that it is not so precious as you like
,but when you lose it after that,it will become so precious as you liked.
[root@localhost grepDir]# 

9)[root@localhost grepDir]# seq 10|grep “5” -C|-A|-B 3              显示特定行的前面或后面的内容     

复制代码
[root@localhost grepDir]# seq 10|grep "5" -C 3
2
3
4
5
6
7
8
[root@localhost grepDir]# seq 10|grep "5" -A 3
5
6
7
8
[root@localhost grepDir]# seq 10|grep "5" -B 3
2
3
4
5
复制代码

10)[root@localhost grepDir]# grep -C 3 “MenAngel” t1.txt t2.txt t3.txt      无论用不用通道,参数都是可用的

[root@localhost grepDir]# grep -C 3 "MenAngel" t1.txt t2.txt t3.txt
t1.txt:I'm MenAngel!
t1.txt-Although I'm still a poor student right now,I believe that someday
 I will be one of the successful man in the world!

11)[root@localhost grepDir]# echo -e “a\nb\nc\na\nb\nc” | grep a -A 1    
  如果匹配结果有多个,会用“–”作为各匹配结果之间的分隔符

复制代码
[root@localhost grepDir]# echo -e "a\nb\nc\na\nb\nc" | grep a -A 1
a
b
--
a
b
[root@localhost grepDir]# 
[root@localhost grepDir]# echo -e "a\nb\nc\nd\na\nb\nc\nd" | grep a -A 1
a
b
--
a
b
[root@localhost grepDir]# echo -e "a\nb\nc\nd\na\nb\nc\nd" | grep a -A 2
a
b
c
--
a
b
c

12)[root@localhost grepDir]# echo this is a text line | grep -e “is” -e “line” -o          制动多个匹配样式

[root@localhost grepDir]# echo this is a text line | grep -e "is" -e "line" -o   //grep这里处理的是前面的echo输出的内容
is
is
line

13)[root@localhost grepDir]# echo MenAngel is sunjimeng|grep -f patfile            指定在文件中每行存的多个字符串

复制代码
[root@localhost grepDir]# cat >patfile <<EOF
> MenAngel
> sunjimeng
> EOF
[root@localhost grepDir]# echo MenAngel is sunjimeng|grep -f patfile
MenAngel is sunjimeng
[root@localhost grepDir]# 

14)[root@localhost grepDir]# grep –help

复制代码
[root@localhost grepDir]# grep --help
用法: grep [选项]... PATTERN [FILE]...
在每个 FILE 或是标准输入中查找 PATTERN。
默认的 PATTERN 是一个基本正则表达式(缩写为 BRE)。
例如: grep -i 'hello world' menu.h main.c

正则表达式选择与解释:
  -E, --extended-regexp     PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
  -F, --fixed-strings       PATTERN 是一组由断行符分隔的定长字符串。
  -G, --basic-regexp        PATTERN 是一个基本正则表达式(缩写为 BRE)
  -P, --perl-regexp         PATTERN 是一个 Perl 正则表达式
  -e, --regexp=PATTERN      用 PATTERN 来进行匹配操作
  -f, --file=FILE           从 FILE 中取得 PATTERN
  -i, --ignore-case         忽略大小写
  -w, --word-regexp         强制 PATTERN 仅完全匹配字词
  -x, --line-regexp         强制 PATTERN 仅完全匹配一行
  -z, --null-data           一个 0 字节的数据行,但不是空行

Miscellaneous:
  -s, --no-messages         suppress error messages
  -v, --invert-match        select non-matching lines
  -V, --version             display version information and exit
      --help                display this help text and exit

输出控制:
  -m, --max-count=NUM       NUM 次匹配后停止
  -b, --byte-offset         输出的同时打印字节偏移
  -n, --line-number         输出的同时打印行号
      --line-buffered       每行输出清空
  -H, --with-filename       为每一匹配项打印文件名
  -h, --no-filename         输出时不显示文件名前缀
      --label=LABEL         将LABEL 作为标准输入文件名前缀
  -o, --only-matching       show only the part of a line matching PATTERN
  -q, --quiet, --silent     suppress all normal output
      --binary-files=TYPE   assume that binary files are TYPE;
                            TYPE is 'binary', 'text', or 'without-match'
  -a, --text                equivalent to --binary-files=text
  -I                        equivalent to --binary-files=without-match
  -d, --directories=ACTION  how to handle directories;
                            ACTION is 'read', 'recurse', or 'skip'
  -D, --devices=ACTION      how to handle devices, FIFOs and sockets;
                            ACTION is 'read' or 'skip'
  -r, --recursive           like --directories=recurse
  -R, --dereference-recursive
                            likewise, but follow all symlinks
      --include=FILE_PATTERN
                            search only files that match FILE_PATTERN
      --exclude=FILE_PATTERN
                            skip files and directories matching FILE_PATTERN
      --exclude-from=FILE   skip files matching any file pattern from FILE
      --exclude-dir=PATTERN directories that match PATTERN will be skipped.
  -L, --files-without-match print only names of FILEs containing no match
  -l, --files-with-matches  print only names of FILEs containing matches
  -c, --count               print only a count of matching lines per FILE
  -T, --initial-tab         make tabs line up (if needed)
  -Z, --null                print 0 byte after FILE name

文件控制:
  -B, --before-context=NUM  打印以文本起始的NUM 行
  -A, --after-context=NUM   打印以文本结尾的NUM 行
  -C, --context=NUM         打印输出文本NUM 行
  -NUM                      same as --context=NUM
      --group-separator=SEP use SEP as a group separator
      --no-group-separator  use empty string as a group separator
      --color[=WHEN],
      --colour[=WHEN]       use markers to highlight the matching strings;
                            WHEN is 'always', 'never', or 'auto'
  -U, --binary              do not strip CR characters at EOL (MSDOS/Windows)
  -u, --unix-byte-offsets   report offsets as if CRs were not there
                            (MSDOS/Windows)

‘egrep’即‘grep -E’。‘fgrep’即‘grep -F’。
直接使用‘egrep’或是‘fgrep’均已不可行了。
若FILE 为 -,将读取标准输入。不带FILE,读取当前目录,除非命令行中指定了-r 选项。
如果少于两个FILE 参数,就要默认使用-h 参数。
如果有任意行被匹配,那退出状态为 0,否则为 1;
如果有错误产生,且未指定 -q 参数,那退出状态为 2。

2017-07-30 每天2个Linux命令 wc命令

Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

(1)用法:

  用法:  wc [选项] [文件]......

(2)功能:

  功能:  wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,
或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。

(3)选项参数

  1)  -c  --bytes            打印字节数

  2)  -m --chars              打印字符数,这个标志不能与 -c 标志一起使用。

  3)  -l  --lines              打印行数

  4)  -L --max-line-length         打印最长行的长度

  5) -w --words              打印单词数,一个单词被定义为由空白、跳格或换行字符分隔的字符串。

(4)实例:

  1)[root@localhost grepDir]# cat patfile|wc -l            统计指定文件的行数

[root@localhost grepDir]# cat patfile
MenAngel
sunjimeng
[root@localhost grepDir]# cat patfile|wc -l
2

2)[root@localhost grepDir]# cat patfile|wc -c            统计文件中的字节数

[root@localhost grepDir]# cat patfile|wc -c                   //这里回车应该算2个字符,2+8+9
19

3)[root@localhost grepDir]# cat patfile|wc -m           统计文件中的字符数

[root@localhost grepDir]# cat patfile|wc -m  
19

4)-c参数与-m参数的区别

复制代码
[root@localhost grepDir]# cat t2.txt
Every one fights for a better future,but I fight for freedom!
[root@localhost grepDir]# cat t2.txt|wc -c
62
[root@localhost grepDir]# cat t2.txt|wc -m
62
[root@localhost grepDir]# cat >wcText <<EOF
> wc命令的功能为统计指定文件中的字节数、单词数、行数, 并将统计结果显示输出
> I'm MenAngel
> EOF
[root@localhost grepDir]# cat wcText|wc -c
120
[root@localhost grepDir]# cat wcText|wc -m
52

5)[root@localhost grepDir]# cat t1.txt|wc -L              显示文件中最长的一行的长度,是字节长度

[root@localhost grepDir]# cat t1.txt
I'm MenAngel!
Although I'm still a poor student right now,I believe that someday
 I will be one of the successful man in the world!
[root@localhost grepDir]# cat t1.txt|wc -L
116

6)[root@localhost grepDir]# ls -l|wc -l                 统计当前目录下的文件的总数

复制代码
[root@localhost grepDir]# ls -l|wc -l
6
[root@localhost grepDir]# ll
总用量 20
-rw-r--r--. 1 root root  19 5月  31 04:44 patfile
-rw-r--r--. 1 root root 131 5月  31 03:56 t1.txt
-rw-r--r--. 1 root root  62 5月  31 03:58 t2.txt
-rw-r--r--. 1 root root 297 5月  31 04:04 t3.txt
-rw-r--r--. 1 root root 120 5月  31 18:25 wcText

7)[root@localhost grepDir]# cat wcText|wc -l             只显示统计数字而不显示文件名

[root@localhost grepDir]# wc -l wcText
2 wcText
[root@localhost grepDir]# cat wcText|wc -l

8)[root@localhost grepDir]# echo “I’m MenAngel”|wc -c       用wc命令处理echo输出的字符串

[root@localhost grepDir]# echo "I'm MenAngel"|wc -c
13
[root@localhost grepDir]# echo "I'm MenAngel"|wc -m
13
[root@localhost grepDir]# echo "I'm MenAngel"|wc -l

文章作者: 邓滔
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 邓滔 !
评论
  目录