Puncte:1

Cum pot elimina un șir din fiecare linie a unui fișier din a doua coloană a unui fișier

drapel bt

Structura fișierului este astfel:

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

Rezultatul pe care il caut este acesta:

34945,/data/system/backups/filename.txt
393092,/data/system/backups/filename.extra.txt
drapel hr
Ce regulă ar trebui folosită pentru a elimina șirul? Ar trebui să fie un fel de potrivire a modelului sau un anumit număr sau componente de director?
donna_unsworthcomcastnet avatar
drapel bt
Vor fi întotdeauna primele 3 directoare din cale, adică /data/file/system01 și primele 2 directoare vor fi aceleași, al treilea va fi diferit
Puncte:2
drapel hr

Dat

$ fișier pisică
34945,/data/file/system01/data/system/backups/filename.txt
393092,/data/file/system-03stby/data/system/backups/filename.extra.txt

atunci

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

sau similar

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

In orice caz, ([/][^/]*){3} este o expresie regulată extinsă care se potrivește cu o bară oblică, urmată de zero sau mai multe caractere fără bară oblică, toate de 3 ori. Dacă primele două directoare sunt constante, puteți folosi ceva de genul sed 's:,/data/file/[^/]*:,:' sau awk -F, 'BEGIN{OFS=FS} {sub(/data[/]fișier[/][^/]*[/]/,"",$2)} 1'.

Sau se divide și se unește în perl:

$ perl -F, -lpe '@p = split /\//, $F[1]; $_ = alăturați fișierului ",", $F[0], (alăturați-vă "/", @p[4..$#p])'
34945,date/system/backups/filename.txt
393092,date/system/backups/filename.extra.txt
terdon avatar
drapel cn
Cred că ai putea folosi doar `sed -E 's:(/[^/]*){3}::'file`. Nu este nevoie de virgulă.
drapel hr
@terdon da, chiar am aruncat asta doar pentru a o ancora fără ambiguitate la începutul celui de-al doilea câmp
terdon avatar
drapel cn
Hmm da, și probabil că este o idee bună. OP a menționat „a doua coloană”.
Puncte:1
drapel cn

Un alt mod Perl, aceeași idee de bază ca Răspunsul lui @steeldriver, dar mai concis:

$ perl -F'[,/]' -nle 'printează "$F[0],/",join("/",@F[5..$#F])' fișier
34945,/data/system/backups/filename.txt
393092,/data/system/backups/filename.extra.txt
Puncte:-1
drapel it

Citit omul tăiat si foloseste tăiați „-d,” -f2- | tăiați -d/ -f5- pe dosarul dvs.

terdon avatar
drapel cn
Aceasta ar avea ca rezultat `data/system/backups/filename.txt` și nu `34945,/data/file/system01/data/system/backups/filename.txt` așa cum a fost solicitat. De asemenea, `,` nu sunt speciale, nu este nevoie să citați `"-d,"`.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.