Linux学习笔记(三)

六、重定向

  • cat:合并文件
  • sort:对文本行排序
  • uniq:报告或者删除文件中重复的行
  • wc:打印文件中的换行符、字和字节数
  • grep:打印匹配行
  • head:输出文件第一部分内容
  • tail:输出文件最后一部分内容
  • tee:读取标准输入的数据,并将其输出到标准输出和文件中

 

标准输入、标准输出和标准错误

与UNIX的“一切都是文件”理念一致,类似于ls的程序实际上把它的运行结果发送到一个称为标准输出的特殊文件中(standard output,简记为stdout),他们的状态信息则发送到一个称为标准错误的文件中(standard error,简记为stderr)。默认情况下,标准输出以及标准错误都被链接到屏幕上,并且不会保存到磁盘文件中。另外,程序从一个称为标准输入(standard input,简记为stdin)的设备来得到输入,默认情况下,标准输入链接到键盘。I/O重定向功能可以改变输出内容发送的目的地,或者改变输入内容的来源地。

 

标准输出重定向

使用重定向操作符‘>’,后面接上文件名,就可以把标准输出重定向到另外一个文件了。

$ ls -l /Users/zhou/Desktop > ls-output.txt

$ ls -l  > ls-output.txt

$ less ls-output.txt 

$ > ls-output.txt 该命令可以创建一个名称为ls-output.txt空文档,或者清空原来ls-output.txt的内容

【注】重定向会重写文件,若想追加内容,则使用' >> '操作符。

 

标准错误重定向

标准错误重定向不能简单的使用一个重定向符来实现。一个程序可以把输出内容发送到任意文件流中,如果把这些文件流中的前三个分别对应标准输入文件、标准输出文件、标准错误文件,那么在shell内部用文件描述符分别索引他们为0、1、2。

$ ls -l /Users/zhou/Desktop 2> ls-output.txt

 

标准输出和标准错误重定向到同一个文件

$ ls -l /Users/zhou/Desktop > ls-output.txt 2>&1

$ ls -l /Users/zhou/Desktop &> ls-output.txt

第一个是传统方法将文件描述符2重定向到文件描述符1中

第二个是bash提供的效率更高的方法联合这一操作

 

标准输入重定向

cat——合并文件

cat [file ...]

$ cat ls-output.txt 将显示ls-output.txt内容

$ cat movie.mpeg.0* > movie.mpeg 将所有的movie文件块按照顺序连接在一起(按顺序是因为通配符按顺序来扩展)

$ cat

 bhsbhcsbhjcvbshbvhsbfvjsfjvan  输入cat命令不带任何参数,他将等待从标准输入中获取数据,输入结束按ctrl+D键

$ cat > lazy_Dog.txt 

vvgvvhvghvghvghvghhgvghvhvg  将所输入的内容写入到lazy_Dog.txt文件中

$ cat < lazy_Dog.txt 将标准输入重定向

 

管道

命令从标准输入读取到数据,并将数据发送到标准输出的能力是使用了名为管道的shell特性。

Command1 | Command2

$ ls -l /user/bin | less

 

过滤器

管道经常用来对数据执行复杂的操作,将多条命令结合在一起构成一个管道。这种方式中常用到的是过滤器命令

 $ ls /bin /user/bin | sort | less 

 

七、透过shell看世界

  • echo:显示一行文本,把文本参数内容打印到标准输出

 

扩展

bash在执行命令之前会对文本进行多重处理,有了扩展功能,在输入内容之后,内容在shell对其执行之前会被扩展成其他内容。

1、路径名扩展:使用通配符来实现扩展的机制称为路径名扩展

【注】echo *  不能打印出隐藏文件,如果使用echo .* 是可以的但是会将 ' . ' 和 ' .. ' 也打印出来,因为这两个名字分别指当前目录和当前目录的父目录。

2、波浪线扩展: ~具有特殊含义,如果把他放在一个单词的开头,他会被扩展为指定用户的主目录名,如果没有指定用户名,则会扩展为当前用户的主目录

3、算数扩展:shell支持使用扩展来运算算数表达式,这允许我们把shell当作计算器来使用。

 $((experssion)) 算数扩展格式 ,算数运算符: +、-、*、/、%、**(取幂)

4、花括号扩展:按照花括号里面的模式创建多种文本字符串,花括号扩展的模式信息可以包括一个成为前导字符的开头部分和一个称为附言的结尾部分。

$ echo Number_{1..5}       $ mkdir {2009..2011}-0{1..9} {2009..2011}-{10..12}

5、参数扩展:参数扩展用在shell脚本中比直接用在命令行中更为有用,他的许多特性与系统存储的小块数据以及给每个小块数据命名的性能有关系,许多这样的小块数据可用于扩展。

$ echo $USER  (如果变量名拼错了仍会进行扩展,只不过输出结果是一个空字符串。)

6、命令替换:命令替换可以把一个命令的输出作为另外一个扩展模式使用

$ echo $(ls) 

 

引用

现在来学习如何控制扩展,shell提供一种称为引用的机制来选择性的避免不想要的扩展。

1、双引号:将文本放在双引号中,shell所使用的所有特殊字符都将失去它们的特殊含义,' $ ' 、' \ '、 ' ' '、除外。

这意味着单词分割、路径名扩展、波浪线扩展、花括号扩展都将失效;但参数扩展、算数扩展、命令替换仍将有效。

2、单引号:我们希望抑制所有的扩展,应该使用单引号。

3、转义字符:想引用单个字符,在该字符前加上反斜杠实现

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值