歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux中重定向輸出的學習

Linux中重定向輸出的學習

日期:2017/3/3 17:00:50   编辑:關於Linux

在這裡,重定向可以做如下理解:

  原來的輸出方式好比是向一個水池(屏幕)中放水的水龍頭,水就是要輸出的內容

  當把水龍頭轉接到不是水池的桶(文件)中時,就是重定向輸出了。

  linux中的輸出方式主要有:

  標准輸出的兩種方式:

  STDOUT 標准輸出

  STDERR 標准錯誤

  屏幕的輸出可以被重定向,使得原來應該輸出到屏幕上的內容被重定向到其他的地方,

  比如說是文件:

  格式:命令 操作 文件名

  e.g.ls /etc -l 1> ls.txt 2>err.txt

  其中:

  命令還是原來操作的命令,所有的已知有輸出命令都是可以的。

  操作是輸出的類型,有

  1> 一類,STDOUT

  2> 二類,STDERR

  &> 所有(包括1類和2類消息)注意此時輸出中如果有錯誤信息,會首先輸出,無論先執行的是1類還是2類輸出

  > 如果不加數字(類型)默認的是標准輸出,即1

  它所執行的操作是首先將重定向到的文件進行刪除,

  注意這一點,是附加append還是要通過臨時文件來寫入

  文件名就是要被重定向到的地方,當原路徑中已有此文件就會被覆蓋,沒有則生成。

  如果想原文件中的內容不被覆蓋而是在後面進行追加(寫在後面)那麼就可以使用如下的操作

  1>> 同 >>

  2>>

  &>>

  追加模式時如果被重定向的輸出有標准輸出和標准錯誤輸出,那麼

  e.g. ls /etc /wrongdir 1>>ls.txt 2>>err.txt

  ls /etc /wrongdor 1>>ls.txt 2>>ls.txt

  不過我在ubuntu12.04中試過後看到使用&>>也是可以的。

  當某類輸出被重定向後,該類輸出便不會在屏幕上顯示

  當標准輸出和標准錯誤輸出同時存在的時候,根據操作的種類決定重定向內容和重定向的文件。

  head 命令:從頭看

  tail 命令:從尾看

  後面可以加上參數進行處理:

  e.g. cat 5.txt | head -n5 察看前5行的內容

  cat 5.txt | head -n 10 |tail -n 7 察看4,5,6,7,8,9,10共7行內容用這種方法可以快速截取某大文件中的某一段

  cat 5.txt | head -n 10 |tail -n 7 >result.txt

  -------------------------------------

  grep 利用正則表達式 達到字符匹配的效果,

  -i (case-insensitive) 中的關鍵開關 表示忽略大小寫的差異

  -n 打印出搜到的內容所在的行號 配合vim使用的話,可用vim +行號數字 路徑

  -v 排除掉給定的東西,給出剩下的東西verse

  cat filename |grep ^# -v |grep -v ^$

  cat filename |gerp -Ev '^(#|$)'--------------注意正則表達式的寫法


以上的兩種寫法是一致的

  -A數字 after 在A之後的數字行的內容

  -B數字 before 在B之前的數字行的內容

  ---------------------------------------

  cut命令 按照制定的內容將內容進行切割,相當於split()函數

  -d (delimiter) 制定分割的分隔符 默認的是Tab e.g. cut -d: #以:進行切割

  -f 制定要打印的列 cut -d: -f 1

  -c 按照字符進行切割 echo "weuhi-qiege-sdfijo"|cut -c 7-11 #切割qiege

  ----------------------------------------

  sort命令 對內容進行排序

  如果直接用sort命令而不制定按照的內容的格式進行排序,那麼默認按照的方式是字符的字典順序

  -n 開關,對內容進行排序,排序格式按照的內容是數字 默認是升序

  -r (reverse)降順

  -t c使用c作為字段分隔符

  -k x對字段x排序 sort -t: -k 3 按照:進行分割後按照第三列進行分割

  -----------------------------------------

  uniq命令

  將相鄰的兩行相同的內容進行移除

  -c 用來統計重復的個數

  cat num.txt | sort |uniq -c 用於統計文本中出現的內容

  -----------------------------------------

  文本分析工具

  wc 對文本進行計數

  -l 行數統計

  -w 單詞數統計

  -c 字節統計

  -m 字符統計(不顯示)

  -----------------------------------------

  文本分析 對比文件

  diff 對文本進行對比分析 輸出保存到一個文件中,稱呼其為“補丁文件”

  使用時使用 -u作為“統一”格式的diff 適用於補丁文件,便於以後用patch命令進行打補丁

  diff filename1 filename2

  出現結果就是兩者文件的不同 顯示的是兩個文件中的不同

  filename1為左文件 < 原文件

  filename2為右文件 > 新文件

  -----------------------------------------

  patch 對文件進行大補丁

  復制所作的改變到其他文件中,使用-b自動備份要改變的文件

  diff -u foo.conf-broken foo.conf-works >foo.patch

  patch -b foo.conf-broken

  ----------------------------------------

  tr traslate 翻譯轉換

  ----------------------------------------

  命令sed(stream editor)全文替換

  但是其編輯的內容只是流的編輯,當然可以替換的內容重定向到文件

  sed ‘s/search/replace/’將要找的內容(search)換成要替換成的內容(replace)

  其中/是定界符 還可以是@ #等

  g 全局開關,使得如果一行中出現多個要被替換的內容時可以全部被替換

  i 忽略大小寫

  d 刪除

  命令前添加 m,n表示對[m,n]行區間的內容執行sed '87,93s/search/replace/'命令

  m=87 n=93

  sed '/cat/,/dog/s/search/replace'

  遇到cat直到dog的內容被替換掉 [cat,dog]

  -----------------------------------------

  sed -e '表達式1' -e '表達式2' -e '表達式3'

  -e開關用法 用一次sed可以執行多個表達式

  -f開關用法 將命令的表達式寫到文件中,然後用sed -f myrule.txt來執行

Copyright © Linux教程網 All Rights Reserved