Yanıtlar:
Takip etmeyi dene:
find ./ -type f -exec sed -i 's/\t/ /g' {} \;
Dört boşluk istiyorsanız şunu deneyin:
find ./ -type f -exec sed -i 's/\t/ /g' {} \;
's/\t/ /g'satırda bir sekme daha yerine.
find ./ -type f -exec sed -i ’s/\t/ /g’ {} +" (yani " +" yerine " \;") yapıyorsa, findsürüm destekliyorsa (ve kişisel olarak olmayan herhangi bir sürümle karşılaşmadım, ancak POSIX standardı değil) , sanırım bazı sistemlerde olabilir. -exec command {} +Kılavuzdaki " " bölümüne bakın ). sedHer dosya için bir örneğini başlatmak yerine , bu, sistemin desteklediği kadar çok sayıda dosya adı bağımsız değişkeniyle (sistemimde getconf ARG_MAX= 2097152) bir argüman listesi oluşturacak xargsve böylece daha az sedişlem başlatacaktır .
sedanlamıyor \t. Kabuğa girebileceğiniz bir değişmez sekme karakteri ile değiştirebilirsiniz [Ctrl]+V, [Tab].
Bunu yapmanın birçok yolu var. Dikkatli olmazsanız veya göründüğünüz gibi Linux'ta yeniyseniz bunu yaparken kendinizi vurmanın birçok yolu vardır. findBir editör gibi veya elle bir düzenleyici kullanarak dönüştürmek istediğiniz dosyaların bir listesini oluşturabileceğinizi varsayarsak, bu listeyi aşağıdakilere ekleyin.
while read file
do
expand "$file" > /tmp/expandtmp
mv /tmp/expandtmp "$file"
done
Kendinizi ayağınızdan çekmenin bir yolu, bir yazım hatası yapmaktır, böylece boş bir dosyayı belirttiğiniz tüm dosya adlarına sarar, böylece tüm dosyalarınızın içeriğini silersiniz. Bu yüzden dikkatli olun ve yedeklediğiniz küçük bir dosya kümesinde ilk yaptığınız şeyi test edin.
mvexpandexpand ... && mv ...
expand -t 4Sekmeleri 4 aralığa genişletmeyi unutmayın . Ayrıca, bu yöntem sondaki satırsonu oluşturabilir. Ama aksi halde çalışır.
find . -type f -iname "*.js" -print0 | xargs -0 -I foo tab2space foo foo
-I foo her giriş satırı için bir şablon değişkeni foo oluşturur, böylece girişe birden çok kez başvurabilirsiniz.
-print0ve -0her iki komuta da SPACE yerine bir satır ayırıcı olarak \ 0 kullanmasını söyleyin, böylece bu komut boşluklu yollar için çalışır.
Bu daha iyi:
find . -name *.java ! -type d -exec bash -c 'expand -t 4 "$0" > /tmp/e && mv /tmp/e "$0"' {} \;
/tmp/eçünkü o dosyayı başka bir şey kullanıyorsa, bu dosyayı bozacaktır. İki kullanıcı bunu aynı anda kullanmak istiyorsa olduğu gibi.
Bu sorunu aşağıdaki gereksinimleri göz önünde bulundurarak denedim:
"Genişletme", dosyaların yerinde değiştirilmesine izin vermediğinden, son gereksinim yerine getirilmesi en zor olanıydı.
Aşağıdaki çözümü buldum:
find . -type f -regextype egrep -regex '.*\.(c|cpp|h|hpp)' -print0 | xargs -0 -n 1 -P 10 -IFILE bash -c ' ( echo "Processing FILE..." && expand -t 4 "FILE" > /tmp/expand.$$ && mv /tmp/expand.$$ "FILE" ) || exit 255'
İşte bazı açıklamalar:
expand, korunan metnin hizalanmasını istediğini varsayıyorum.