![](/img/trans.png)
[英]how to insert newline in a already existing BASH string on the command line
[英](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
無需進一步的參數即可讀取標准輸入和輸出,因此您可以將發現的輸出通過管道( |
)傳遞給awk
( find ... -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.