ที่ให้ไว้
$ ไฟล์แมว
34945,/data/file/system01/data/system/backups/filename.txt
393092,/data/file/system-03stby/data/system/backups/filename.extra.txt
แล้ว
$ sed -E 's:,(/[^/]*){3}:,:' ไฟล์
34945,/data/system/backups/filename.txt
393092,/data/system/backups/filename.extra.txt
หรือในทำนองเดียวกัน
$ awk -F, 'BEGIN{OFS=FS} {sub(/([/][^/]*){3}/,"",$2)} 1' ไฟล์
34945,/data/system/backups/filename.txt
393092,/data/system/backups/filename.extra.txt
ไม่ว่าในกรณีใด ([/][^/]*){3}
เป็นนิพจน์ทั่วไปแบบขยายที่จับคู่เครื่องหมายทับ ตามด้วยอักขระที่ไม่ใช่เครื่องหมายทับ 0 ตัวขึ้นไป ทั้งหมด 3 ครั้ง หากสองไดเร็กทอรีแรกคงที่ คุณสามารถใช้บางอย่างเช่น sed 's:,/data/file/[^/]*:,:'
หรือ awk -F, 'BEGIN{OFS=FS} {sub(/data[/]file[/][^/]*[/]/,"",$2)} 1'
.
หรือแยกและรวมใน perl:
$perl -F, -lpe '@p = แยก /\//, $F[1]; $_ = เข้าร่วม ",", $F[0], (เข้าร่วม "/", @p[4..$#p])' ไฟล์
34945,data/system/backups/filename.txt
393092,data/system/backups/filename.extra.txt