Linux——输出重定向&特殊字符
2016-05-05 16:45
686 查看
Appending
在前面我们提到过输出重定向:echo "This is all a dream..." > dream.txt
如果dream.txt存在,执行上述语句将会覆盖之前的内容。如果这个dream.txt不存在,那么会自动新建一个dream.txt文件,将上述字符串添加进去。这整个过程牵扯了从命令的标准输出(standard output)到文件的标准输入(standard input)。
如果我们不想覆盖原有的dream.txt,我们可以使用两个>>:
echo "Wake up!" >> dream.txt
看个例子:
~$ echo "99 bottles of beer on the wall..." > beer.txt ~$ echo "Take one down,pass it around,98 bottles of beer on the wall..." >> beer.txt ~$ nano beer.txt 99 bottles of beer on the wall... Take one down,pass it around,98 bottles of beer on the wall...
Redirecting From A File
上面一个例子是从命令重定向到文件,现在我们看看怎么从文件重定向到命令,这牵扯到从文件的标准输出到命令的标准输入。Linux排序命令sort将文件中的每行数据按字母顺序排列的。如果添加-r标识,将会反向排列。
~$ sort -r < beer.txt Take one down,pass it around,98 bottles of beer on the wall... 99 bottles of beer on the wall...
The Grep Command
有的时候我们需要在几个文件中查找我需要的内容,Linux中 grep这个命令就是实现这个功能的。~$ echo "Coffee is almost as good as beer,But I could never drink 99 bottles of it" > coffee.txt
Special Characters
倘若我们想在很多个文件中查找某些文本,那么我们需要一一将其列举出来,显然这是很不现实的,比如有下面这些文件:beer1.txt beer2.txt
我们可以使用?这个字符作为占位符,它可以是任意字符(不包括空字符,意思是不匹配beer.txt文件):
beer1.txt:beers are lots of beer beer2.txt:I do not like beer
The Star Wildcard
星号也是一个通配符(Wildcard),此时是可以匹配任意字符,包括空(以为上面那个句子可以匹配beer.txt文件)。并且比?更强大,因为它可以匹配任意长度的字符串,比如.txt是匹配任意的txt文件。Piping Output
管道输出(Piping Output)字符 | 使得一个命令的标准输出可以通过管道传送到另一个命令的的标准输入,在链接命令时很有用。比如现在我们有一个1000行的文件log.txt,我需要查找其最后10行是否有”error”这个字符串,首先需要使用tail -n 10 logs.txt获取文本的最后十行,这个命令产生了一个标准输出,然后我们需要将其传送到grep “Error”命令的标准输入中,使用 | 这个字符就可以搞定啦:
tail -n 10 logs.txt | grep "Error"
我们也可以将一个Python脚本的标准输出传送出来,比如现在有个脚本rand.py,内容如下:
import random for i in range(10000): print(random.randint(1,10))
然后将其标准输出传送到一个查询命令的标准输入中:
echo -e "import random\nfor i in range(10000):\n print(random.randint(1,10))\n" > rand.py python rand.py | grep 9
上面这段代码将打印出所有的9,总共1000个
Chaining Commands
如果我们想让两行命令按顺序执行,我们可以使用&&将命令链接起来。比如:echo "All the beers are gone" >> beer.txt && cat beer.txt
上面这段代码首先会将All the beers are gone存储到beer.txt文件中去,然后会打印beer.txt的所有内容。只有当第一条命令执行完毕后,&&才会去执行第二条命令。如果第一条执行出错,就会报错,不会继续执行第二条。
~$ echo "beer is not a goo thing" >> beer.txt && cat beer.txt 99 bottles of beer on the wall... Take one down, pass it around, 98 bottles of beer on the wall... beer is not a goo thing
Escaping Characters
所有的特殊字符都在这里,当你在字符串或者命令中使用这些特殊字符时,不想对原有字符串中正常字符有影响,因此需要转义字符。转转义字符会告诉shell不用将这个字符作为特殊字符对待,比如:echo ""Get out of here," said Neil Armstrong to the moon people." >> famous_quotes.txt
上面这段语句由于“的原因不会正常运行,因此需要转义字符(\)”
echo "\"Get out of here,\" said Neil Armstrong to the moon people." >> famous_quotes.txt
向文件中添加两个”“
~$ echo "\"\"" > zm.txt ~$ cat zm.txt ""
相关文章推荐
- linux启动环境变量配置文件加载图例
- linux服务启动和自启动
- Freescale imx6 linux platform 驱动模型分析
- centos7下使用yum安装mysql
- linux日常运维基础命令
- linux下yum常用方法及本地yum仓库的搭建
- linux下的文件打包和解压
- Linux(centos)操作技巧汇总----->持续更新中
- VIM常用操作和使用方法
- linux下的 sudo ln -s 源文件 目标文件
- 如何开启Centos6.4系统的SSH服务
- Linux开机自运行 & 登录自运行配置
- centOS中mysql一些常用操作
- linux 下配置安装mysql以及配置【经验】
- centos 6.5中yum安装php5.4
- Linux学习文档
- Linux编辑器vi使用方法详细介绍
- centos sort
- FHS定义的Linux目录树
- 深入浅出 - Android系统移植与平台开发(六)- 搭建基于Linux的Android开发环境