Dải khoảng trắng theo sau từ các tập tin


10

Câu trả lời để xóa khoảng trắng theo dấu với sed có hầu hết câu trả lời, nhưng tôi muốn

sed -i 's/[ \t]*$//' $1

để có thể lấy số lượng đối số tệp tùy ý làm tập lệnh shell trên dòng lệnh, bao gồm cả đối số toàn cục. Tức là giả sử kịch bản được gọi strip_trailing_whitespace. Sau đó, tôi muốn có thể làm cả hai

strip_trailing_whitespace foo.cc bar.cc

strip_trailing_whitespace *.cc *.hh

để xóa các khoảng trắng theo dõi từ tất cả các tệp của biểu mẫu *.cc*.hh. Các lập luận không dựa trên câu trả lời được trích dẫn ở trên cũng tốt.

Câu trả lời:


13

$1là một tham số vị trí ; nó sẽ mở rộng thành đối số đầu tiên được truyền cho tập lệnh. Có rất tương tự $2, $3... $9, ${10}, ${11}, ...

Các tham số đặc biệt "$@" sẽ mở rộng tới một danh sách tất cả các tham số vị trí.

Vì vậy, bạn có thể làm như sau:

sed -i 's/[ \t]*$//' "$@"

Nếu bạn muốn truyền toàn cầu / mẫu cho tập lệnh này (hoặc cho bất kỳ chương trình nào), nó phải được thoát hoặc trích dẫn khi bạn gọi tập lệnh - đây là một chức năng của trình bao; nó sẽ mở rộng bất kỳ mẫu nào trước khi tập lệnh của bạn nhìn thấy nó. Trường hợp này không cần điều đó - trình bao có thể mở rộng mô hình và tất cả các kết quả của việc mở rộng đó đều được chuyển qua sed.


Chính xác theo cùng một cách : echo "$@". Sử dụng tham số không thay đổi nó theo bất kỳ cách nào, vì vậy bạn có thể tham chiếu $@(hoặc bất kỳ tham số nào khác: vị trí, đặc biệt hoặc không) bao nhiêu lần bạn muốn.
Shawn J. Goff

Vâng, tôi nhận ra rằng sau khi tôi đăng, nhưng dường như quá chậm để xóa câu hỏi. :-)
Faheem Mitha

hãy nhớ rằng -i.bak... không đề cập đến việc đôi khi tôi bắt gặp một số biến thể của sedkhông có -i:) ... +1, vẫn còn.
0xC0000022L

Điều này không hoạt động với phiên bản của sedtàu có OS X. Thay vào đó, hãy cài đặt gnu-sed( brew install gnu-sed) và thay thế sedbằng gsedtrong lệnh.
Robert Audi

8

Tôi thấy thật dễ dàng khi chỉ sử dụng sed với xargs như sau:

find . -name "*.xml" | xargs sed -i 's/[ \t]*$//'

find . -type f | grep cc | xargs sed -i 's/[ \t]*$//'

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.