Điểm:1

Làm cách nào tôi có thể xóa một chuỗi khỏi mọi dòng của tệp trong cột thứ hai của tệp

lá cờ bt

Cấu trúc tập tin là như thế này:

34945,/data/file/system01/data/system/backups/filename.txt
393092,/data/file/system-03stby/data/system/backups/filename.extra.txt

Kết quả mà tôi đang tìm kiếm là thế này:

34945,/data/system/backups/filename.txt
393092,/data/system/backups/filename.extra.txt
lá cờ hr
Quy tắc nào nên được sử dụng để loại bỏ chuỗi? Nó có phải là một kiểu khớp mẫu nào đó, hoặc một số cụ thể hoặc các thành phần thư mục không?
donna_unsworthcomcastnet avatar
lá cờ bt
Sẽ luôn là 3 thư mục đầu tiên trong đường dẫn, tức là /data/file/system01 và 2 thư mục đầu tiên sẽ giống nhau, thư mục thứ ba sẽ khác
Điểm:2
lá cờ hr

Được cho

tệp con mèo $
34945,/data/file/system01/data/system/backups/filename.txt
393092,/data/file/system-03stby/data/system/backups/filename.extra.txt

sau đó

$ sed -E 's:,(/[^/]*){3}:,:' tệp
34945,/data/system/backups/filename.txt
393092,/data/system/backups/filename.extra.txt

hoặc tương tự

$ awk -F, 'BEGIN{OFS=FS} {sub(/([/][^/]*){3}/,"",$2)} 1' tệp
34945,/data/system/backups/filename.txt
393092,/data/system/backups/filename.extra.txt

Trong cả hai trường hợp, ([/][^/]*){3} là một biểu thức chính quy mở rộng khớp với một dấu gạch chéo, theo sau là 0 hoặc nhiều ký tự không phải dấu gạch chéo, cả 3 lần. Nếu hai thư mục đầu tiên không đổi, bạn có thể sử dụng một cái gì đó như sed 's:,/data/file/[^/]*:,:' hoặc awk -F, 'BEGIN{OFS=FS} {sub(/data[/]file[/][^/]*[/]/,"",$2)} 1'.

Hoặc tách và tham gia trong Perl:

$ perl -F, -lpe '@p = split /\//, $F[1]; $_ = tham gia ",", $F[0], (tham gia "/", @p[4..$#p])'
34945,dữ liệu/hệ thống/sao lưu/tên tệp.txt
393092,dữ liệu/hệ thống/sao lưu/tên tệp.extra.txt
terdon avatar
lá cờ cn
Tôi nghĩ bạn chỉ có thể sử dụng `sed -E 's:(/[^/]*){3}::' file`. Không cần dấu phẩy.
lá cờ hr
@terdon vâng, tôi thực sự chỉ ném nó vào để neo nó một cách rõ ràng vào đầu trường thứ hai
terdon avatar
lá cờ cn
Hmm vâng, và đó có lẽ là một ý kiến ​​​​hay. OP đã đề cập đến "cột thứ hai".
Điểm:1
lá cờ cn

Một cách Perl khác, ý tưởng cơ bản giống như câu trả lời của @steeldriver, nhưng ngắn gọn hơn:

$ perl -F'[,/]' -nle 'print "$F[0],/",join("/",@F[5..$#F])'
34945,/data/system/backups/filename.txt
393092,/data/system/backups/filename.extra.txt
Điểm:-1
lá cờ it

Đọc người đàn ông cắt Và sử dụng cắt "-d," -f2- | cắt -d/ -f5- trên tập tin của bạn.

terdon avatar
lá cờ cn
Điều đó sẽ dẫn đến `data/system/backups/filename.txt` chứ không phải `34945,/data/file/system01/data/system/backups/filename.txt` như được yêu cầu. Ngoài ra, `,` không phải là đặc biệt, không cần phải trích dẫn `"-d,"`.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.