Làm cách nào để thay thế tất cả các tab trong mỗi tệp trong một nhánh hệ thống tệp bằng 2 dấu cách?


10

Tôi mã Scala và quy ước của nó là sử dụng khoảng trắng gấp đôi cho mỗi cấp độ để nhận dạng. Nhưng việc sử dụng các trình soạn thảo khác nhau làm cho các nguồn của tôi chứa đầy hỗn hợp các khoảng trắng và tab.

Tôi thực sự muốn cấu trúc lại tất cả các tệp (* .scala tệp, nhưng chỉ định điều này là không cần thiết) (trong một thư mục nhất định và tất cả các nhánh FS bên dưới (đệ quy)), thay thế tất cả các tab bằng dấu cách kép. Tôi tin rằng có một cách dễ dàng và đẹp mắt để làm điều này với các công cụ Unix / GNU cổ điển, nhưng tôi thiếu bất kỳ kinh nghiệm nào trong lĩnh vực này. Bạn sẽ rất tốt bụng để giúp tôi?

Câu trả lời:


9

Đệ quy, sử dụng expand(được thực hiện cho mục đích này):find . -type f -name '*.scala' -exec bash -c 'for x in "$@"; do mv "$x"{,.bak} && expand -t 2 "$x.bak" > "$x" && rm "$x.bak"; done' {} +

Tôi sẽ làm điều đó với sedhoặc perl(xem câu trả lời của Sardathrion) vì họ hỗ trợ chỉnh sửa nội tuyến, nhưng dù sao tôi cũng muốn đề cập đến ol 'tốt expand.

EDIT: Đó sẽ là find . -type f -name '*.scala' -exec perl -p -i -e $'s/\t/ /g' {} +


Các biến thể đầu tiên hoạt động như mong đợi. Biến thể thứ hai (perl) thay thế một tab chỉ có một khoảng trắng thay vì hai.
Ivan

Vâng, xin lỗi: đó là một lỗi định dạng. Mã nguồn cho biết hai khoảng trắng, nhưng HTML được hiển thị chỉ hiển thị một khoảng trắng.
janmoesen

10

Điều này nên làm điều đó:

find . -type f -name '*.scala$' -exec sed -i 's/\t/  /g' {} +

Lưu ý: điều này không được thử nghiệm.


1
Điều này chưa được đệ quy. Bạn có thể sử dụng findhoặc một vỏ hỗ trợ **/*.scalacho đệ quy.
janmoesen

Đã chỉnh sửa để thêm hành vi đệ quy ...
Sardathrion - chống lại lạm dụng SE

Xin đừng quảng bá find | xargs. Sử dụng find -execthay thế, như tôi đã đề cập trong câu trả lời của tôi. Dễ dàng và an toàn hơn.
janmoesen

Đã thử điều này, không có kết quả. Lệnh trả về ngay lập tức và không có gì thay đổi bên trong các tập tin.
Ivan

Điều này không được thử nghiệm nhưng ý chính của nó sẽ hoạt động.
Sardathrion - chống lại lạm dụng SE
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.