printf終端打印
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、樺南ssl等。為超過千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的樺南網(wǎng)站制作公司
printf使用的參數(shù)和C語言中的printf函數(shù)一樣,使用引用文本或由空格分隔的參數(shù)。在printf函數(shù)中,我們可以使用格式化字符串,指定字符串的寬度、左右對(duì)齊方式等。在默認(rèn)情況下,printf不會(huì)在行尾添加換行符,需要手動(dòng)添加。
復(fù)制代碼代碼如下:
printf "Hello world"??????????????????? #使用引用字符
printf "%-5s %-10s %-4s\n" No Name Mark #指定寬度及左對(duì)齊方式
printf "%-5s %-10s %-4s\n" 1 Sarath 80.3456
----僅供參考
sed = 文件名 | sed 'N;s/\n/:/' | sed -n '/顯示行包含的關(guān)鍵字/p',例子:
假設(shè)我有文件test,內(nèi)容為:
Baidu123
ppppqqqq
bAidu567
a.此時(shí)我想把含有baidu的行以 "行號(hào):該行完整內(nèi)容"的形式輸出,則只需要執(zhí)行:
sed = test | sed 'N;s/\n/:/' | sed -n '/baidu/Ip' //最后p前面的是大寫的I
得到結(jié)果為:
1:Baidu123
3:bAidu567
*.忽略大小寫,還有一個(gè)比較笨的方法,使用[],將關(guān)鍵字的所有字母的大小寫都包括了,就來例來說,/[bB][aA][iI][dD][uU]/
b.輸出所有的行,不使用關(guān)鍵字過濾行,則只需要去掉最后一部分,即:
sed = test | sed 'N;s/\n/:/'
得到結(jié)果為:
1: Baidu123
2:ppppqqqq
3bAidu567
完!
---------------------------------------------
grep解決這個(gè)問題比較好吧,假設(shè)有文件test,內(nèi)容為:
Baidu123
ppppqqqq
bAidu567
如果我想得到格式如 line: line_content這種格式內(nèi)容的話:
grep -ni "baidu" test
結(jié)果為:
1:Baidu123
3:bAidu567
最簡單的你 a.out 1.txt
或者用dup2,重定向。
你首先要搞清楚控制臺(tái)上的輸出是怎么輸出的,比如說是程序里面printf出來的, 腳本里面echo出來的等等。
然后做一個(gè)寫日志的函數(shù)代碼那個(gè)輸出。也可以把標(biāo)準(zhǔn)輸出的文件描述符dup到你要寫的文件上面。
最簡單的你 a.out 1.txt
或者用dup2,重定向。
函數(shù)執(zhí)行,產(chǎn)生的標(biāo)準(zhǔn)輸出,已經(jīng)再控制臺(tái)了,我再把它重定向。
你首先要搞清楚控制臺(tái)上的輸出是怎么輸出的,比如說是程序里面printf出來的, 腳本里面echo出來的等等。
然后做一個(gè)寫日志的函數(shù)代碼那個(gè)輸出。也可以把標(biāo)準(zhǔn)輸出的文件描述符dup到你要寫的文件上面。
execvp(args[0], args) 這個(gè)函數(shù)運(yùn)行產(chǎn)生的結(jié)果。
使用命令重定向操作符可以使用重定向操作符將命令輸入和輸出數(shù)據(jù)流從默認(rèn)位置重定
向到不同的位置。輸入或輸出數(shù)據(jù)流的位置即為句柄。
下表將列出可用的句柄。
句柄 句柄的數(shù)字代號(hào) 描述
STDIN 0 鍵盤輸入
STDOUT 1 輸出到命令提示符窗口
STDERR 2 錯(cuò)誤輸出到命令提示符窗口
UNDEFINED 3-9 這些句柄由應(yīng)用程序單獨(dú)定義,并且是各個(gè)工具特定的。
數(shù)字 0 到 9 代表前 10 個(gè)句柄。可以使用命令 Cmd.exe 運(yùn)行程序并將該程序前 10 個(gè)
句柄中的任何一個(gè)重定向。要指定想使用的句柄,可在重定向操作符前面鍵入該句柄的
數(shù)字。如果未定義句柄,則默認(rèn)的 重定向輸入操作符是 0,而默認(rèn)的 重定向輸出
操作符是 1。鍵入 或 操作符之后,必須指定要讀取或?qū)懭霐?shù)據(jù)的位置??梢灾付?/p>
文件名或另一個(gè)現(xiàn)有的句柄。
要指定重定向到現(xiàn)有句柄,請(qǐng)使用與 () 字符,后面接要重定向的句柄號(hào)
(例如 句柄#)。例如,下面的命令可以將句柄 2(即 STDERR)重定向到
句柄 1(即 STDOUT):
21
下表列出了可用于將輸入和輸出數(shù)據(jù)流進(jìn)行重定向的操作符。
重定向操作符 描述
將命令輸出寫入到文件或設(shè)備(例如打印機(jī))中,而不是寫在命令提示符窗口或句柄中。
從文件中而不是從鍵盤或句柄中讀入命令輸入。
將命令輸出添加到文件末尾而不刪除文件中的信息。
將一個(gè)句柄的輸出寫入到另一個(gè)句柄的輸入中。
從一個(gè)句柄讀取輸入并將其寫入到另一個(gè)句柄輸出中。
| 從一個(gè)命令中讀取輸出并將其寫入另一個(gè)命令的輸入中。也稱作管道。
默認(rèn)情況下,可以從鍵盤將命令輸入(即 STDIN 句柄)發(fā)送到 Cmd.exe,然后由
Cmd.exe 將命令輸出(即 STDOUT 句柄)發(fā)送到命令提示符窗口。
重定向輸入 ()
要將鍵盤輸入重定向到文件或設(shè)備,請(qǐng)使用 操作符。例如,要從 File.txt 獲取
sort 命令的輸入,請(qǐng)鍵入:
sortfile.txt
File.txt 的內(nèi)容將以字母順序列表的方式顯示在命令提示符窗口中。
操作符可以打開具有只讀訪問的指定文件名。所以,不能使用該操作符向文件中寫入
信息。例如,如果以 2 啟動(dòng)程序,則所有試圖讀取句柄 0 的操作都將失敗,因?yàn)榫?/p>
柄 2 最初是以只寫訪問打開的。
注意
0 是 重定向輸入操作符的默認(rèn)句柄。
重定向輸出 ()
幾乎所有的命令都將輸出發(fā)送到命令提示符窗口。即使將輸出發(fā)送到驅(qū)動(dòng)器或打印機(jī)的
命令也會(huì)在命令提示符窗口顯示消息和提示。
要將輸出從命令提示符窗口重定向到文件或設(shè)備,請(qǐng)使用 操作符。可以在許多命令中
使用該操作符。例如,要將 dir 輸出重定向到 Dirlist.txt,請(qǐng)鍵入:
dirdirlist.txt
如果 Dirlist.txt 不存在,Cmd.exe 將創(chuàng)建該文件。如果 Dirlist.txt 存在,Cmd.exe
將使用 dir 命令的輸出替換文件中的信息。
要運(yùn)行 netsh routing dump 命令,然后將輸出發(fā)送到 Route.cfg,請(qǐng)鍵入:
netsh routing dumpc:\route.cfg
操作符可以打開具有只寫訪問屬性的指定文件。所以,不能使用該操作符讀取文件。
例如,如果使用重定向 0 啟動(dòng)程序,則所有試圖寫入句柄 1 的操作都將失敗,因?yàn)?/p>
句柄 0 最初是以只讀訪問打開的。
注意
1 是 重定向輸出操作符的默認(rèn)句柄。
復(fù)制句柄
重定向操作符 可以將輸出或輸入從一個(gè)指定句柄復(fù)制到另一個(gè)指定的句柄。例如,
要將 dir 輸出發(fā)送到 File.txt 并將錯(cuò)誤輸出發(fā)送到 File.txt,請(qǐng)鍵入:
dirc:\file.txt 21
復(fù)制句柄時(shí),可以復(fù)制該句柄原狀態(tài)的所有特性。例如,如果一個(gè)句柄具有只寫訪問的
屬性,則該句柄的所有副本都具有只寫訪問屬性。不能將一個(gè)具有只讀訪問屬性的句柄
復(fù)制到另一個(gè)具有只寫訪問屬性的句柄。
使用 操作符重定向輸入和副本
要將重定向輸入操作符 () 與復(fù)制操作符 () 一起使用,指定的文件必須已經(jīng)存在。
如果輸入文件存在,Cmd.exe 將以只讀方式打開該文件,然后將文件中包含的字符作為
輸入發(fā)送到此命令(如同從鍵盤輸入一樣)。如果指定了句柄,Cmd.exe 將指定的句柄
復(fù)制到系統(tǒng)現(xiàn)有的句柄中。
例如,要以句柄 0 輸入讀取(即 STDIN)的方式打開 File.txt,請(qǐng)鍵入:
file.txt
要打開 File.txt,并在內(nèi)容排序后將輸出發(fā)送到命令提示符窗口(即 STDOUT),請(qǐng)鍵入:
sortfile.txt
要查找 File.txt,然后將句柄 1(即 STDOUT)和句柄 2(即 STDERR)重定向到
Search.txt,請(qǐng)鍵入:
findfile file.txtsearch.txt 21
要以句柄 0 輸入讀取(即 STDIN)的方式復(fù)制用戶定義句柄 3,請(qǐng)鍵入:
3
使用 操作符重定向輸出和復(fù)制
如果將輸出重定向到文件且指定了現(xiàn)有的文件名,Cmd.exe 將以只寫方式打開文件并覆
蓋該文件內(nèi)容。如果指定了句柄,Cmd.exe 將文件復(fù)制到現(xiàn)有句柄中。
要將用戶定義句柄 3 復(fù)制到句柄 1,請(qǐng)鍵入:
3
要將包括句柄 2(即 STDERR)的所有輸出從 ipconfig 命令重定向到
句柄 1(即 STDOUT),然后將輸出重定向到 Output.log,請(qǐng)鍵入:
ipconfig.exeoutput.log 21
使用 重定向操作符追加輸出
要從命令中將輸出添加到文件末尾而不丟失文件中已存在的任何信息,請(qǐng)使用兩個(gè)連續(xù)
的大于號(hào)(即 )。例如,下面的命令可以將由 dir 命令生成的目錄列表追加到
Dirlist.txt 文件:
dirdirlist.txt
要將 netstat 命令的輸出追加到 Tcpinfo.txt 的末尾,請(qǐng)鍵入:
netstattcpinfo.txt
使用管道操作符 (|)
管道操作符 (|) 可以提取一個(gè)命令的輸出(默認(rèn)情況下是 STDOUT),然后將其導(dǎo)入另
一個(gè)命令的輸入中(默認(rèn)情況下是 STDIN)。例如,下面的命令將對(duì)目錄分類:
dir | sort
在本例中,將同時(shí)啟動(dòng)兩個(gè)命令,但隨后 sort 命令會(huì)暫停,直到它接收到 dir 命令
的輸出為止。sort 命令使用 dir 命令的輸出作為輸入,然后將輸出發(fā)送到
句柄 1(即 STDOUT)。
合并帶重定向操作符的命令
可以通過合并帶有其他命令和文件名的篩選器命令創(chuàng)建自定義命令。例如,可以使用以
下命令存儲(chǔ)包含“LOG”字符串的文件名:
dir /b | find "LOG" loglist.txt
dir 命令的輸出通過 find 篩選器命令發(fā)送。包含字符串 "LOG" 的文件名作為文件名
列表(例如,NetshConfig.log、Logdat.svd 和 Mylog.bat)存儲(chǔ)在文件
Loglist.txt 中。
要在相同命令中使用多個(gè)篩選器,請(qǐng)使用管道 (|) 分隔篩選器。例如,下面的命令將
搜索 C 盤上的每個(gè)目錄以查找包含 "LOG" 字符串的文件名,并且在命令提示符窗口中
每次顯示一屏:
dir c:\ /s /b | find "LOG" | more
利用管道 (|) 可以將 Cmd.exe 導(dǎo)向?yàn)橥ㄟ^ find 篩選器命令發(fā)送 dir 命令輸出。
find 命令只選擇包含字符串 "LOG" 的文件名。more 命令可以顯示由 find 命令選擇
的文件名(在命令提示符窗口中每次顯示一屏)。有關(guān)篩選器命令的詳細(xì)信息,請(qǐng)參閱
使用篩選器。
根據(jù)你的意思,可以這樣
#includestdio.h
#includestdlib.h
int main(){
system("./`cat /proc/mtd`");
return 0;
}
system() 函數(shù)就是調(diào)用shell。
`cat /proc/mtd` 就是取得這個(gè)命令的執(zhí)行結(jié)果
./`cat /proc/mtd` 就是執(zhí)行這個(gè)結(jié)果。
但是 在我的系統(tǒng)中執(zhí)行cat /proc/mtd ,
cat: /proc/mtd: 沒有那個(gè)文件或目錄
所以沒有辦法測試,但是這個(gè)方法是對(duì)的。如果cat /proc/mtd的結(jié)果是很多個(gè)的話,最好加上cut命令 來作為取舍
tee用于把命令結(jié)果打印在屏幕上并同時(shí)保存到文件。
tee用法
描述:從標(biāo)準(zhǔn)輸入中讀取并同時(shí)寫入到標(biāo)準(zhǔn)輸出和指定的文件上
選項(xiàng):
-a,--append:不覆蓋,而是追加輸出到指定的文件中
-i,--ignore-interrupts:忽略中斷信息
若指定的輸出文件為'-',則再次輸出到標(biāo)準(zhǔn)輸出上
實(shí)例:
tee Example.txt #將標(biāo)準(zhǔn)輸入中輸入的內(nèi)容同時(shí)輸出到Example.txt和標(biāo)準(zhǔn)輸出上
實(shí)踐:
例如 ifconfig | tee ifconfig.log
查看iconfig.log
注:
標(biāo)準(zhǔn)輸入一般有鍵盤和其它文件,標(biāo)準(zhǔn)輸出有屏幕等。tee只能進(jìn)行標(biāo)準(zhǔn)輸入的輸出,對(duì)于錯(cuò)誤輸入是不能輸出的。
在調(diào)試腳本時(shí),想要每個(gè)命令的執(zhí)行過程都輸出到屏幕或者文件中,以便后續(xù)查看,如何操作呢?首先腳本第一行要寫為“#!/bin/bash -x”,這樣會(huì)把每個(gè)命令的執(zhí)行記錄都輸出到屏幕,若還要輸出到指定文件,要用到tee,但tee只能進(jìn)行標(biāo)準(zhǔn)輸入,對(duì)于標(biāo)準(zhǔn)輸入和錯(cuò)誤輸入要用到下式:
./filename.sh 21 | tee output.log? ?或者直接 bash -x ./filename.sh?21 | tee output.log
今天調(diào)試一個(gè)bash,要把屏幕的輸出結(jié)果存到log文件中,開始輸入$bash -x ./test.sh log 結(jié)果發(fā)現(xiàn)log里只存放了程序的執(zhí)行結(jié)果,后來在cu的一篇帖子里?tid=264380highlight=bash得到了啟發(fā),bash -x的調(diào)試信息是輸出到2號(hào)流中的,所以解決方案為bash -x ./test.sh 21 | tee log 想起以前要存放執(zhí)行make的結(jié)果時(shí)也遇到類似問題,總結(jié)如下:
1、管道符的“I”的作用只是把前一個(gè)程序的標(biāo)準(zhǔn)輸出流(stdout)的數(shù)據(jù)作為后一個(gè)程序的標(biāo)準(zhǔn)輸入流stdin的數(shù)據(jù),如不進(jìn)行重定向,則其他輸出流的信息是無法傳給后面的程序的
2、屏幕得到的信息不一定是從程序的標(biāo)準(zhǔn)輸出來的,也包括標(biāo)準(zhǔn)錯(cuò)誤輸出流stderr中的信息
3、有些程序(特別是象bash、make這樣執(zhí)行了其他程序的程序)的設(shè)計(jì)者為了省事,把一些正常情況的信息也放在stderr中輸出(即使程序本身并無錯(cuò)誤),而stdout用來輸出被調(diào)用程序的執(zhí)行時(shí)信息,造成了用戶的誤解簡單編寫了一下腳本,通過ssh登陸在命令行下運(yùn)行正常,可是將腳本添加到crontab中就不正常。想記錄一下輸出信息,分析一下錯(cuò)誤原因。將腳本通過使用info.log 重定向輸出,結(jié)果發(fā)現(xiàn)一些在命令行下可以看到的文本信息沒有記錄到info.log文件中,研究了一下,那些輸出估計(jì)是輸出到了標(biāo)準(zhǔn)錯(cuò)誤上。
研究了一下通常添加命令后面幾個(gè)輸出含義
■ /dev/null 輸出到空設(shè)備,表示丟掉輸出信息。
■ 21將輸出到標(biāo)準(zhǔn)錯(cuò)誤的信息輸出到標(biāo)準(zhǔn)輸出設(shè)備(通常是屏幕)有3個(gè)默認(rèn)的i/o,
■ 0是標(biāo)準(zhǔn)輸入,一般是鍵盤
■ 1是標(biāo)準(zhǔn)輸出,一般是屏幕
■ 2是標(biāo)準(zhǔn)錯(cuò)誤,有時(shí)候屏幕上可以看到,但是重定向的文件中看不到的就是它了
你想刪除查找結(jié)果的行吧,
那不用兩個(gè)命令,
可以直接刪除匹配關(guān)鍵字的行
sed -n '/關(guān)鍵字/d' filename
也可以在查找之后加上替換命令,替換的字符串為空就可以實(shí)現(xiàn)刪除
sed -n '/查詢字符串/p' filename | sed 's/要?jiǎng)h除的字符串/空/g'
關(guān)鍵字,查詢字符串和要?jiǎng)h除字符串可以用正則表達(dá)式。
如果非要用傳遞的話,寫個(gè)shell script
#!/bin/sh
MyLine='sed -n '/10.10.10.222 10.10.0.1 : PSK "abcdefgh"/=' filename'
然后把 MyLine 傳給下一條命令就行了
sed '/MyLine/d' filename
當(dāng)前標(biāo)題:linux把命令結(jié)果打印 linux使用打印機(jī)
分享地址:http://muchs.cn/article36/hheppg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)、App設(shè)計(jì)、定制網(wǎng)站、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)