shell学习笔记三

grep命令:

    who查看谁登陆系统了

    who | grep -F username 查看该用户在哪里登陆系统了

    语法   grep [options...] pattern-spec [files...]

    用途   显示匹配一个或者多个模式的文本行,时常会作为管道(pipeline)的第一步,以便于对匹配的数据进一步处理

    主要选项:

    -E 使用扩展正则表达式进行匹配。grep -E 可以取代传统的egrep

    -F 使用固定字符串进行匹配。 grep -F 可以取代传统的fgrep

    -e pat-list 第一个非选项的参数会指定要匹配的模式

    -f pat-file 从pat-file文件读取模式作匹配

    -i 模式匹配时忽略字母大小写差异

    -l 列出匹配模式的文件名称,而非打印匹配的行

    -q 若模式匹配成功则grep离开将不匹配的行写入标准输出;否则为不成功

    -s 不显示错误信息,常与-q并用

    -v 显示不匹配模式的行

ERE运算符的优先级由高到低:

     [..] [==] [: :]  用于特殊字符对应的方括号符号

     \metacharacter  用于转义的meta字符

     []   方括号表达式

     ()分组

    *+?{}  重复潜质的正则表达式

    无符号 (no  symbol)   连续字符

    ^$  锚点

    | 交替

一般来说:执行文本替换的正确程序是sed-----流编辑器,它本身就是设计用来以批处理的方式而非交互的方式来编辑文件。在shell脚本中,sed主要做一些简单的文本替换。

    sed命令:

    语法: sed [-n] 'editing command' [file...]

               sed [-n] -e editing command' ... [file...]

               sed [-n] -f script-file ... [file...]

    用途:编辑它的输入流,将结果生成到标准输出,而非以交互式编辑器的方式来编辑文件。

    在s命令里以g结尾表示的是:global全局性,意即“替代文本取代正则表达式中每一个匹配的”,如果没有设置g,则sed只会取代第一个匹配的,看一个样例:

    [root@localhost shell_practice]# echo Wsy love apple.Wsy love banana. > wsy.txt

    [root@localhost shell_practice]# sed 's/Wsy/Feng/' < wsy.txt

    Feng love apple.Wsy love banana.

    [root@localhost shell_practice]# sed 's/Wsy/Feng/g' < wsy.txt

    Feng love apple.Feng love banana.

有两个问题是:有多少文本会被匹配?从哪里开始匹配?

    答案是:正则表达式可以匹配整个表达式的输入文本中最长的最左边的字符串。

cut命令:

        语法:   cut -c list [file...]

                 cut -f list [-d delim] [file...]

    用途:从输入文件中选择一个或者多个字段或者一组字符,配合管道,可再做进一步处理

join命令

    语法:join [options...] file1 file2

    用途:以共同一个键值,将已存储文件内的记录加以结合

如需从输入的数据文件中抽取特定的文本行,最主要的工具就是grep。POSIX采用猜中不同的grep变体:grep、egrep、fgrep。POSIX的正则表达式主要有两种:基本正则表达式BRE、扩展正则表达式ERE.一般来说ERE比BRE强大,但是不总是如此。sed是处理简单字符串替换的主要工具,大部分的shell脚本在使用sed时几乎都是用来做替换的操作。awk多半用于简单的“单命令行程序”,当你想要只显示选定的字段或是重新安排行内字段顺序时,就是使用AWK的时候了。由于它是编程语言,即使是在剪短的程序里也鞥发挥强大的功能、灵活性与控制能力。