2012-03-24 84 views
-6

現在我有一些麻煩。我正在尋找解決一個問題的方法。我在樹中有一些文件,其名稱是stdout-captured,stderr-captured和status-capture,我必須將這些文件重命名爲stdout-expected,stderr-expected和status-expected。 感謝您的幫助。一些使用sed和awk的問題

+4

'mv stdout-captured stdout-expected'等有什麼問題? – Philipp 2012-03-24 23:00:00

+0

不清楚。請更好地解釋你需要什麼。 – dAm2K 2012-03-24 23:00:47

+0

它是「狀態捕獲」還是「狀態捕獲」(像其他人一樣) – dldnh 2012-03-24 23:02:03

回答

2

從我們可以看出這個問題,你試圖創建一個程序規則,重命名文件的擴展庫stdout-captured結束,stderr-capturedstatus-captured(假設一個錯字)到文件擴展名stdout-expectedstderr-expected結束,並status-expected , 分別。顯然,如果每個定義都包含一個文件,那麼死記硬背可能更合適。

要執行你sed想要的翻譯,只需調用下面的/bin/bash與期望的目標作爲當前的工作目錄:

EXTENSION=stdout-captured 
REPLACEMENT=stdout-expected 
for arg in $(ls *.$EXTENSION); \ 
    do mv $arg $(echo $arg | sed s/\\.$EXTENSION/.$REPLACEMENT/); \ 
    done 

...其中$EXTENSION$REPLACEMENT對每個病例​​定義你希望檢測和替換。這假設文件的其餘部分中沒有任何文件包含.$EXTENSION。此解決方案不需要awk

要在多個目錄中遞歸調用此操作,請考慮將ls替換爲find並相應更新規則。請注意,findhas its own facilities也可以對找到的資源執行操作。