2011-07-27 35 views

Trả lời

0

Sau đây sẽ chỉ thực hiện thay thế trên các chuỗi gồm bốn chữ số, theo sau là các chuỗi gồm hai chữ số.

$ echo '201107' | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)/\1-\2/' 
2011-07 

Sed regex là một chút vụng về, vì sự thiếu \d, và sự cần thiết để thoát khỏi dấu ngoặc đơn và dấu ngoặc (nhưng không phải giá treo đồ). Giải pháp của tôi nên's/(\d{4})(\d{2})/\1-\2/' nếu không cho những đặc thù này.

18
echo "201107" | sed 's/201107/2011-07/' 

Nên hoạt động. Nhưng chỉ đùa thôi, đây là giải pháp tổng quát hơn:

echo "201107" | sed 's/^\(.\{4\}\)/\1-/' 

Điều này sẽ chèn - sau bốn ký tự đầu tiên.

HTH

0

Tôi biết điều này là diggin lên một con khủng long khổng lồ, nhưng nếu bạn muốn loại bỏ 6 số không tailing

echo '20110715000000' | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{6\}\)/\1-\2-\3/' 
Các vấn đề liên quan