您的位置:首页 > 运维架构 > Linux

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
""
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: