Linux 文本處理(2) (寫入資料到文件)(重定向指令 >、>>、| 管道、標準數據流 stdin、stdout、stderr)
前言
本文將會介紹linux中的標準數據流,以及常見將數據寫入文件的方法
寫入資料到文件
通常有幾種方法
- 使用 vi 編輯器
- 重定向符( >、>> )
echo
指令 搭配 >、>> 重定向符tee
指令
echo (直接打印文字到終端上)
直接打印文字到終端上
1 |
|
終端機上就會打印出hello world
但有時想要將打印的文字寫入到文件,而非只是打印出來,可以配合 >
、>>
符號
1 |
|
此命令會將hello world
寫入到 test
文件中
重定向符 >
、>>
兩者的差異
>
符號:覆蓋檔案內容
>
符號會將文字寫入指定的文件中,
- 如果文件存在,會覆寫內容
- 如果文件不存在,會創建新文件,並寫入內容
1 |
|
此時打印test
文件內容應該會出現hello world
>>
符號:追加檔案內容
>>
符號會將文字寫入指定的文件中,但不是使用覆寫的方式,而是在原本的內容上追加內容到文件末尾
1 |
|
如果原本的test
文件裡面已有內容,那會在文件末尾追加hello world
,linux 文件末尾通常是換行符(\n
),所以會在新的一行看到hello world
tee 指令 (將資料寫入文件外,同時也在終端打印)
- 將內容打印到終端,並寫入文件
1 |
|
這個指令類似於,先打印,在使用 >
寫入文件
1 |
|
- 將內容打印到終端,並
追加
寫入文件
1 |
|
加上 -a
參數
重定向符號
>
覆寫內容>>
追加內容2>
錯誤輸出重定向<
從文件讀取內容,而不是從終端輸入|
通道符,可以將文本傳給下一個指令處理
>
:輸出重定向,覆蓋檔案內容
使用 >
可將命令的輸出重定向到指定的文件,如果該文件已經存在,則內容會被覆蓋;文件不存在則會創建一個新檔案
>>
:追加輸出重定向,追加檔案內容
用 >>
可將命令的輸出附加到指定的文件,如果該文件已經存在,則內容會被追加。
<
:輸入重定向
從文件讀取內容,而不是從終端輸入
1 |
|
如上方指令就是將 tempfile
的內容傳到sort 指令裡,之後再寫入到test
文件
2>
:錯誤輸出重定向
將錯誤的輸出寫入到指定的檔案
1 |
|
例如,如果在刪除delfile
的過程中出現錯誤,就將錯誤的原因寫入test
文件,
可以做到將一般的輸出與錯誤輸出分流的效果
|
:管道
將前一個命令的輸出,傳給後面的命令處理
1 |
|
將myfile
中出現status: 502
的行數,傳給後面的tail
指令處理
stdin、stdout、stderr
stdin
、stdout
、stderr
是linux命令啟動時,創建的 標準數據流
,linux 在執行命令時,是像流式一樣處理數據,
命令就像外殼(shell)一樣,這個外殼有來源跟出口,也就是輸入
跟輸出
,當要執行指令時,需要將數據流輸入
外殼,並告訴命令這些數據流輸出
的流向,是要透過管道|
傳給下一個命令處理? 還是重定向>
、>>
傳遞到文件內。
在linux 當中,所有的檔案都被視為一個文件,每一個文件都會分配一個獨立的文件標示符
stdin
:標準輸入,文件標示符為 0stdout
:標準輸出,文件標示符為 1stderr
:標準錯誤,文件標示符為 2
stdin
代表著標準輸入,以下是常見用途
用戶輸入:在命令行中獲取用戶鍵盤的輸入
文件輸入:讀取文件的內容,作為其他命令的輸入
stdout
代表著標準輸出,以下是常見用途
終端輸出:程式運行的結果輸出到終端上
重定向到文件:程式運行的結果使用
>
、>>
,將數據寫入到文件中
stderr
代表著標準錯誤,通常用於將程式執行過程中的 錯誤
、警告和異常訊息輸出到終端或檔案,以下是常見用途
區分一般輸出與錯誤的輸出:將正常輸出和錯誤訊息區分開來,使得使用者能夠更容易地捕捉並處理這些不同類型的訊息。
將錯誤輸出重定向到文件:使用
2>
將程式運行時遇到的錯誤輸出,寫入到文件中
1 |
|