簡體   English   中英

(BASH)如何在命令中刪除默認的'newline'運算符

[英](BASH)How to remove default 'newline' operator in command

我有一個命令:

find /etc -type f \( ! -perm /o=w \) -exec /usr/bin/ls -hastl '{}' \; -exec /usr/bin/md5sum '{}' \; > somefile.log

這個命令創建了這樣的打印輸出(我不需要斷行):

...
4.0K -rw-r--r--. 1 root root 332 Oct 23  2012 /etc/xinetd.d/rsync
fd32314f3157aaf15712e6da7758060d  /etc/xinetd.d/rsync
....

問題:我必須在此命令中添加什么才能刪除新行操作才能得到這樣的結果:

(...) is '-rw-r--r--. 1 root root 332 Oct 23  2012'

...
4.0K (...) /etc/xinetd.d/rsync >> fd32314f3157aaf15712e6da7758060d  /etc/xinetd.d/rsync
...

這樣的命令怎么樣

echo "$(ls -hastl '{}') >> $(md5sum '{}')"

每對相鄰的行都有兩個連接,只需將輸出輸出到awk 'NR%2{line=$0;next}{print line sep $0}' sep=" >> "即可根據需要調整sep

附錄:

為了回應原始作者的評論,我將解釋此解決方案的一些細節:

awk記錄處理輸入,而沒有逐行的其他選項。 (內部)變量NR存儲當前記錄的編號。 %是模數運算符,因此NR%2對於奇數行號求值為1對於偶數行數求值為0 {...}將要執行的命令(所謂的“動作”)分組。 由於1被認為是“ true”而0被認為是“ false”,因此僅對奇數行號執行第一個操作。 該動作由兩個命令組成:首先,將整行( $0 )存儲在變量line ,然后處理next line記錄(不考慮任何其他動作)。 對於偶數行,不執行此操作,因此考慮第二個操作。 由於在執行{之前沒有表達式,所以操作:存儲的(即前一個) line與名為sep的變量和當前行( $0 )串聯。 結果字符串將被打印(並在末尾自動添加一個新行)。 sep的值作為參數傳遞給awk ,以使其易於調整而不會弄亂腳本。 由於awk無需進一步的參數即可讀取標准輸入和輸出,因此您可以將發現的輸出通過管道( | )傳遞給awkfind ... -exec ... -exec ... | awk ... > ...

恕我直言,您只能使用exec執行一個命令。 一個可能的解決方案可能是您執行“ sh -c”,因此可以使用管道和類似方法:

最后有一個換行符:

find /etc -type f -exec sh -c "/bin/ls -hastl '{}' | tr '\n' ' '" \; -exec /usr/bin/md5sum '{}' \;

沒有任何換行符:

find /etc -type f -exec sh -c "/bin/ls -hastl '{}' | tr '\n' ' '" \; -exec sh -c "/usr/bin/md5sum '{}'| tr -d '\n' " \;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM