我很難做一些非常簡單的事情。我有大約 2000 個 .txt 文件,它們由一行數字組成。我想使用折疊命令將單行折疊成具有多行的一列,並用這個新的折疊版本覆蓋原始文件。我的嘗試:
#!/bin/bash
for i in *.txt ; do
fold -w 1 $file > $file
done
不起作用。幫助?謝謝。
答案1
這裡有兩個問題。首先,您聲明變數“i”,但使用不存在的“$file”。即使確實如此,第二個問題是 bash 讀取“從左到右”。這意味著它將首先看到“>$file”,並將覆蓋檔案的內容。因此,如果您使用正確的變量,您就會丟失資料。
所以,一個錯誤把你從另一個錯誤中救了出來,你很幸運,很幸運:)
嘗試類似的方法:
for i in *.txt ; do fold -w 1 $i > sillytmpfile; mv sillytmpfile $i; done
答案2
sed
也可能是一個選項,它在內部處理臨時檔案問題:
for i in *.txt ; do
sed -i 's#.#&\n#g' $file
done