Score:1

ฉันจะลบสตริงออกจากทุกบรรทัดของไฟล์ในคอลัมน์ที่สองของไฟล์ได้อย่างไร

ธง bt

โครงสร้างไฟล์เป็นดังนี้:

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

ผลลัพธ์ที่ฉันกำลังมองหาคือ:

34945,/data/system/backups/filename.txt
393092,/data/system/backups/filename.extra.txt
hr flag
ควรใช้กฎข้อใดในการลบสตริง มันควรจะเป็นรูปแบบที่ตรงกันหรือเป็นจำนวนเฉพาะหรือส่วนประกอบไดเร็กทอรีหรือไม่?
donna_unsworthcomcastnet avatar
bt flag
จะเป็น 3 ไดเร็กทอรีแรกในพาธเสมอ เช่น /data/file/system01 และ 2 ไดเร็กทอรีแรกจะเหมือนกัน ไดเร็กทอรีที่สามจะต่างกัน
Score:2
ธง hr

ที่ให้ไว้

$ ไฟล์แมว
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
terdon avatar
cn flag
ฉันคิดว่าคุณสามารถใช้ `sed -E 's:(/[^/]*){3}::' file` ไม่จำเป็นต้องใช้เครื่องหมายจุลภาค
hr flag
@terdon ใช่ฉันแค่โยนมันลงไปเพื่อยึดมันไว้ที่จุดเริ่มต้นของฟิลด์ที่สองอย่างไม่น่าสงสัย
terdon avatar
cn flag
อืม ใช่ และนั่นน่าจะเป็นความคิดที่ดี OP ได้กล่าวถึง "คอลัมน์ที่สอง"
Score:1
ธง cn

อีกวิธีหนึ่งของ Perl แนวคิดพื้นฐานเดียวกับ คำตอบของ @steeldriverแต่รัดกุมยิ่งขึ้น:

$ perl -F'[,/]' -nle 'พิมพ์ "$F[0],/",join("/",@F[5..$#F])' ไฟล์
34945,/data/system/backups/filename.txt
393092,/data/system/backups/filename.extra.txt
Score:-1
ธง it

อ่าน ผู้ชายตัด และใช้ ตัด "-d," -f2- | ตัด -d/ -f5- ในไฟล์ของคุณ

terdon avatar
cn flag
ซึ่งจะส่งผลให้เป็น `data/system/backups/filename.txt` และไม่ใช่ `34945,/data/file/system01/data/system/backups/filename.txt` ตามที่ร้องขอ นอกจากนี้ `,` ไม่พิเศษ ไม่จำเป็นต้องอ้างอิง `"-d,"`

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา