Linux——输出重定向&特殊字符

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                                               
"" 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值