Thay đổi ngày, ngày 29 tháng 7 năm 2011, ngày 18 tháng 7 năm 2011


8

Tôi có rất nhiều tệp HTML chứa ngày có định dạng July 29th, 2011

Tôi muốn thay đổi định dạng ngày July 29th, 2011thành 20110729,December 9th, 2010 sang 20101209, v.v.

Tôi nghĩ sedcó thể hoạt động nhưng vẫn không thể tìm ra giải pháp vì trình tự gián tiếp của nó.


Bạn sẽ tốt hơn với perl có thể đọc định dạng một ngày và xuất ra một định dạng khác, nhưng perl-foo của tôi không đủ tốt, hy vọng ai đó sẽ gắn vào.
EightBitTony

Câu trả lời:


7

Đây là loại điều khó khăn hơn nhiều so với hầu hết các công cụ. awkCả hai mô-đun POSIX của GNU và Perl đều cung cấp cho bạn strftime(), nhưng không phải là mộtstrptime() thứ bạn muốn.

Trong mọi trường hợp, nó vẫn khá dễ dàng với Perl ...

$ perl -MDate::Manip -lpe '$_=UnixDate(ParseDate($_), "%Y%m%d")' <<END
> July 29th, 2011
> December 9th, 2010
> END
20110729
20101209

Rõ ràng là có nhiều hơn thế, vì bạn thực sự muốn chuyển đổi HTML. Nếu bạn có thể tìm ra một regex với sed sẽ hoạt động để tìm chuỗi ngày, bạn sẽ có thể làm điều gì đó rất giống với Perl.

$ perl -MDate::Manip -lpe 's/(")([^"]+)(")/$1 . UnixDate(ParseDate($2), "%Y%m%d") . $3/ge' <<END
dates enclosed "July 29th, 2011" in quotes
"December 9th, 2010"
END
dates enclosed "20110729" in quotes
"20101209"

Ở đâu / làm thế nào để tôi có được Date::Manipmô-đun? ... Perl của tôi gây ra lỗi cho tôi, "Không thể định vị Ngày / Manip.pm trong @INC ..." . Có phải là một mô-đun bổ sung tôi cần phải cài đặt bằng cách nào đó? ... Tôi đang sử dụng perl, v5.10.1
Peter.O

@fred: Hầu hết các trình quản lý gói distro sẽ có điều này, hãy thử tìm kiếm ở đó. Trên hệ thống của tôi, tên gói là perl-Date-Manipnhưng tên của bạn sẽ thay đổi. Bạn cũng có thể có được nó bằng cách sử dụng cpan.
Caleb

@StevenPritchard: Bạn viết câu trả lời hay và hữu ích, tôi rất vui khi thấy bạn xung quanh cộng đồng này. Tôi chỉ muốn lưu ý rằng cộng đồng này phụ thuộc vào phiếu bầu để tiếp tục hoạt động. Phiếu bầu không chỉ giúp sắp xếp câu trả lời mà còn định hình trang web bằng cách thay đổi nội dung hiển thị ở đâu, kết quả tìm kiếm và quan trọng nhất là giúp giữ người dùng tốt xung quanh để cảnh sát trang web. Không có phiếu thì nó chết. Bạn chỉ có tổng cộng 3 phiếu. Bạn được tặng 30 để sử dụng mỗi ngày! Vui lòng xem xét sử dụng kiến ​​thức của bạn để cải thiện trang web này bằng cách bỏ phiếu về những gì bạn nghĩ là có giá trị hay không.
Caleb

@Caleb: Cảm ơn. Nó nằm trong kho lưu trữ của Ubuntu với tên libdate-manip-perl.... @Steven Pritchard: Đó là một giải pháp hay ... Cảm ơn.
Peter.O

1
Ngày GNU có cả phân tích cú pháp và in, nhưng July 29th, 2011không phải là một định dạng ( July 29, 2011hoạt động) được công nhận và bạn cần đặt khá nhiều cơ sở hạ tầng shell và sed / awk xung quanh nó.
Gilles 'SO- đừng trở nên xấu xa'
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.