您的位置:首页 > 其它

重定向、管道、正则表达式中的常见命令

2013-03-03 20:47 302 查看
1  管道和重定向: 
1.1  运算器、控制器:CPU  
存储器:RAM

输入设备/输出设备

地址总线:内存寻址

数据总线:传输数据

控制总线: 控制指令

寄存器:CPU内部暂时存储器

1.2   I/O:硬盘,键盘,鼠标 
程序:(程序运行结束后数据保存在内存当中,而关机后数据保存在外围设备上)

INPUT设备(数据或指令的来源):硬盘,键盘,鼠标,网卡

OUTPUT设备:

系统设定

默认输出设备:标准输出,STDOUT,用数字1标识 (passwd --stdin)

默认输入设备:标准输入,STDIN,用数字0标识

标准错误输出:专门定义错误的信息保存在何处,STDERR,用数字2标识

标准输入:键盘

标准输出和错误输出:默认都被定性到显示器

1.3  I/O重定向(改变了数据的输出来源和输入来源)
对linux而言重定向需使用一些符号来完成:

>:输出重定向(覆盖目标输出的源文件,简称为覆盖输出)

eg:ls /var > /tmp/var.out 把var指定到tmp下的var.out

>>:追加输出(可以保留文件原有的内容,而且在文件尾部继续新增新内容)

eg:ls /var >> /tmp/var.out  然后cat /tmp/var.out一下就可发现新变化

set -C:禁止对已经存在文件使用覆盖重定向;

若强制覆盖输出,则使用>|   eg:ls /usr >| /tmp/var.out

set +C;关闭上述功能

2>:重定向错误输出

2>>:追加方式实现重定向错误输出

&>:重定向标准输出或错误输出至同一个文件 eg:ls /var6 &> /tmp/var5.out (错误输出)

eg:ls /var &> /tmp/var5.out (正确输出)

<:输入重定向     eg:tr 'a-z''A-Z' < /etc/fstab 把小写字母换成大写字母

<<:Here Document(在此处生成文档)

eg:cat << END(文档结束符)

cat << EOF(endof UI)

cat >> /tmp/myfile.txt << EOF  (此方法可在脚本中生成文档或生成文件)

 2   管道:前一个命令的输出,作为后一个命令的输入(可以使用n重管道)  
命令1 | 命令2 | 命令3 | ...

eg:# echo "hello,world."

# echo "hello,world." | tr 'a-z''A-Z'  可把“hello,world."换成"HELLO,WORLD."

eg:cut -d: -f1 /etc/passwd |sort 对etc下的文件passwd的用户名排序

eg:cut -d: -f1 /etc/passwd |sort -n  对etc下的文件passwd中的数字按数值大小排序

2.1    tee(从标准输入读取数据,并且发送至标准输出和文件;可将数据既保存到文件当中又可输出到屏幕上来)) 
eg:echo “Hello,Word.” | tee /tmp/hello.out   把“Hello,Word.”保存到/tmp/hello.out下,是由tee出来的,而非echo出来的

eg:wc -l /etc/passwd | cut -d' ' -f1    只显示passwd文件下的行数

2.2   文本查找的需要  
grep,egrep,fgrep

grep(Global Research全面的去搜索研究正则表达式并显示出来):根据模式,搜索文本,并将符合模式的文本行显示出来。(本身意义作部分匹配)

Pattern(模式):文本字符和正则表达式的字符组合而成匹配条件

用法:grep [options] PATTERN [FILE...]

eg:grep 'root' /etc/paswd 查找文件中符合条件的行

-i:表示忽略字符大小写   eg:grep -i 'root' /etc/passwd

--color(或者--colour):后面必须带上值 eg:grep --color'root' /etc/passwd

eg:alias grep='grep --color' 为'grep --color' 起个别名,以便直接使用grep来表示其含义

-v:反向查找,被模式匹配到的行不显示,不匹配到的行反而显示(显示未配匹配到的行)

-o:只显示被模式匹配到的字符串

3     正则表达式:ReGular EXPression(简写为REGEXP) 
3.1    元字符:
. : 表示匹配任意单个字符 eg:grep 'r..t' /etc/passwd 查找以r开头,以t结尾,中间含有两个任意字符的文件

[] :  匹配指定范围内的任意单个字符

[^]: 匹配指定范围外的任意单个字符

字符集合:[:digit:],[:lower:],[:upper:],[:punct:],[:alpha:],[:alnum:]

eg:grep '[[:digit:]]$' /etc/inittab  以数字结尾的行

eg:grep '[[:space:]][[:digit:]]]$' /etc/inittab  以一个空白字符后跟数字结尾的行

匹配次数(贪婪模式 即尽可能长的匹配):

*:匹配其前面的字符任意次

eg: a, b, aab, acb, adb, amnb

a*b:  b, aab

a.*b: ab, aab, acb, adb, amnb

a?b: b, ab, aab, acb, adb, amnb

a\{1,3\}b: a, aab

a.\{1,3\}b: aab, acb, adb, amnb

.* :任意长度的任意字符

\?:匹配其前面的字符1次或0次,表示字符可有可无

\{m,n\}:匹配其前面的字符至少m次,至多n次

\{1,\} :匹配其前面的字符至少1次,多了不限

\{0,3\}:匹配其前面的字符最多3次,不出现也行

3.2    位置锚定:
^: 锚定行首,此字符后面的任意内容必须出现在行首

eg:grep '^r..t' /etc/passwd

$: 锚定行尾,此字符前面的任意内容必须出现在行尾

eg: grep 'y$' /etc/inittab  查找etc下以y结束的行

eb: grep 'b..h$' /etc/passwd 查找etc下以b开头中间跟任意两个字符以h结尾的行

^$:空白行

eg:grep '^$' /etc/inittab 查找etc下的空白行

eg: grep '^$' /etc/inittab | wc -l  查找etc下的空白行的行数

\<或\b: 锚定词首,其后面的任意字符必须作为单词首部出现

\>或\b:锚定词尾,其前面的任意字符必须作为单词尾部出现

\<root\>:在整个文件当中每一行就找root这个单词,必须是整个单词

eg: grep ”root\>" test2.txt    root出现在词尾

eg: grep "\<root" test2.txt    root出现在词首

eg;grep "\<root\>" test2.txt  精确查找root

 3.3   分组:  
\(\)

ab* :  a后面跟一个或多个b,不跟b也行

\(ab\)*  :ab可出现0次1次或n次  eg:grep "\(ab\)*" test.txt

后向引用(被前面括号括起来的内容后面我们可以使用一个单词继续引用它)

eg:nano test3.txt

He love his lover.

She like her liker.

He like his lover.

She like him.

#grep 'l..k' test3.txt   以l开头k结尾中间跟两个字符

#grep 'l..e*l..e' text3.txt  一行当中必须要出现包含了以l开头然后两个字符以e结尾的字符中间跟任意字符后又跟以l开头然后两个字符以e结尾的字符

#grep '\(l..e\).*\1' test3.txt 若前面出显love则后面也匹配love,若前面匹配like后面引用like

\1:引用第一个左括号以及与之对应的右括号所包括的所有的内容;

\2:引用第二个左括号以及与之对应的右括号所包括的所有的内容;

\3:引用第三个左括号以及与之对应的右括号所包括的所有的内容;

eg:grep '\([0-9]\).*\1$' /etc/inittab    在/etc/inittab文件中行中行首出现了任意一个数字中间跟任意字符行尾也出现与行首相同的数字
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息