Xóa dấu phẩy trong dòng


10

Làm cách nào để xóa một dấu phẩy dấu trong bash:

a,b,c,d,,,,
1,2,3,,,,

Kết quả mong muốn:

a,b,c,d
1,2,3

Đã thử làm điều này:

 grep "5628" test.csv | sed 's/,*$//g'

nhưng nó không hoạt động. Các tập tin ban đầu đến từ một máy Windows.


2
Bạn có chắc là nó không hoạt động? Bạn đã chạy lệnh gì đầy đủ?
cuonglm

Tích cực. Nó đã không.
user2980702

Bạn có thể cung cấp lệnh chính xác của mình không, làm ơn ( sedbạn đã hiển thị mà không có tên tệp đóng vai trò là bộ lọc và không xử lý tệp tại chỗ )
roaima

grep "5628" test.csv | sed 's /, * $ // g'
user2980702

2
Nếu bạn cần sử dụng tệp trong * nix và bạn không cần phải sao chép lại vào Windows, về lâu dài có thể chuyển đổi các kết thúc dòng từ CR / LF sang NL bằng dos2unixhoặc tương tự .
G-Man nói 'Phục hồi Monica'

Câu trả lời:


13

Re lệnh bạn đã cung cấp:

grep "5628" test.csv | sed 's/,*$//g'

Điều này sẽ xuất ra các dòng khớp với '5628' với tất cả các dấu phẩy được xóa. Nó sẽ không cập nhật các tập tin test.csv.

Tuy nhiên, bạn đã chỉ ra tệp đến từ máy Windows, do đó, kết thúc dòng là CR / NL thay vì chỉ NL. Kết quả là có một CR ẩn ở cuối dòng và thay vào đó bạn cần một dòng lệnh:

grep "5628" test.csv | sed 's/,*\r*$//'

Trên thực tế, bạn có thể chỉ cần một lệnh này:

sed -n '/5628/s/,*\r*$//p' test.csv

Tôi không cố gắng để cập nhật tại chỗ. Chỉ cần đầu ra mà không có dấu phẩy
user2980702

Điều này làm việc Cảm ơn bạn rất nhiều. Vì vậy, chúng tôi đang tìm kiếm nhiều dấu phẩy (, *) trước khi trả lại vận chuyển ở cuối tệp (\ r * $). Tôi có đúng không
dùng2980702

Việc này \r*cho phép các ký tự CR từ 0 trở lên (vì vậy nó sẽ tiếp tục hoạt động với các tệp có nguồn gốc Unix / Linux). Tôi muốn sử dụng \r?để chỉ ra một CR tùy chọn duy nhất nhưng tôi không thể nhớ cờ sedđể bảo nó sử dụng ERE ngoài đỉnh đầu của tôi. Tôi nghĩ rằng nó -rnhưng chưa được kiểm tra ở đây. Cái ,*này là của bạn và khớp với dấu phẩy từ 0 trở lên.
roaima

những gkhông cần thiết trong trường hợp này, ter chỉ là 1 kết thúc theo quy định của$
NeronLeVelu

2
sed -n '/5628/ s/,*\r*$//p' test.csv

(không phải OP chỉ yêu cầu xóa dấu vết hôn mê) điều này tránh quá trình đường ống, sed lấy trực tiếp bộ lọc và chuyển đổi

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.