2013-01-20 51 views
-1

我正在使用下面的代碼來替換dos2unix行結尾。每次執行代碼時,它都會停留在命令提示符處。下面的命令有什麼問題?替換dos2unix行結尾

for i in `find . -type f \(-name "*.c" -o -name "*.h" \)`; do sed -i 's/\r//' $i ; done 
+0

爲什麼不直接使用'dos2unix'命令? – jahroy

+1

你在哪個平臺上?您可能想根據答案使用xargs ... – jahroy

+0

@jahroy - 我在我的Ubuntu上安裝了dos2unix,但每次運行時都會顯示「找不到dos2unix命令」 – user1934146

回答

0

我建議確認您的find命令和for循環正常工作。

您可以通過簡單地使用echo語句來打印每個文件的名稱。

根據您的平臺(多少.C.H文件你),你可能需要使用xargs的,而不是直接操縱從找到輸出上。很難說,因爲你還沒有告訴我們你在哪個平臺上。

此外,根據您的平臺,不同版本的的sed工作方式不同與-i選項。

有時你必須指定一個文件擴展名用於備份文件,有時你不必。

以上都是我建議一塊一塊測試你的命令的原因。

您應該閱讀您嘗試在其上使用它的系統上嘗試使用的每個命令的手冊頁。

關於sed命令的一部分,您應該在單個文件上測試以確保它可以正常工作。

您可以使用下面的sed命令來修復您的新行:鍵入CTRL

sed 's/^M$//' input.txt > output.txt

您可以鍵入^MvCTRL 米

就像我之前說過,-i選項在不同平臺上的工作方式不同。

如果您無法正常工作,您可以讓sed輸出一個新文件,然後覆蓋原始文件。

在for循環中這將會非常簡單。

2

在Ubuntu中,dos2unixunix2dos分別實現爲todosfrodos。它們可在包tofrodos中獲得。

我建議使用

find . -type f \(-name "*.c" -o -name "*.h" \) -print0 | xargs -0 frodos