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 | |