2017-09-21 20 views
-3

ich aus einem Bash Ergebnis-Datei den Pfad und den Kurznamen des Benutzers extrahieren müssen greifen, aber ich weiß wirklich nicht, wie es mit sed zu analysieren oder awksed oder awk Multi Muster und Druck

Dies ist ein Beispiel von 1lined Ergebnis zu ordnen.

"drwxr-xr-x+","2","adm","com.apple.local.ard_admin","68","Sep","7","23:17","/Volumes/raid-partages/POLE LTD/Plannings mensuels et hebdos LTD/Z Archive Planning CS LTD/Planning 2017 ds dossier CS","0: user:d_zeiger inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit,"1: user:f_mure inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit,"2: group:projet_gestion_temps_plannings_ls inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit,"3: group:css_et_cs_pole45_bsi_drh inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit,"4: user:us9-2_cadre inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit,"5: user:css_ltd inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit,"6: user:c_naegel inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit,"7: user:d_zeiger inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit,"8: user:us3_soins inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit,"9: user:css_ltd inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit,"10: user:extrahosp_s4_cadre inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit,"11: user:p_triantafyllidis inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit,"12: user:us_3 inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit,"13: user:a_burglen inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit,"14: user:d_spiess inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit,"15: user:s_kling inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit,"16: user:hopjour_cadre_s4 inherited allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit,"17: user:mc_broggini inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit,"18: user:c_faffa inherited allow list,search,readattr,readextattr,readsecurity,file_inherit,directory_inherit" 

ich brauche (ein immer die 9-Daten den Pfad) /Volumes/raid-partages/POLE LTD/Plannings mensuels et hebdos LTD/Z Archive Planning CS LTD/Planning 2017 ds dossier CS zu extrahieren und zum Beispiel user:us_3 (die in jeder Position nach dem Weg sein können)

+0

Präfix Code/Daten mit vier weißen Räumen. Bitte werfen Sie einen Blick auf [editing-help] (http://stackoverflow.com/editing-help). – Cyrus

+0

Was ist 'user: us_3'? Es gibt viele 'Benutzer: etwas'. – pacholik

+0

ja pacholik, Benutzer: accountname –

Antwort

0

Jetzt ist Ihre Frage ist klar: get-Verzeichnis aus Spalte 9, wenn ein Benutzer us_3 irgendwo in der definiert Linie.

Lösung mit GNU awk:

$ awk -F, -v usr=us_3 '$0 ~ "user:"usr{print gensub(/"/,"","g",$9)}' input.txt 
/Volumes/raid-partages/POLE LTD/Plannings mensuels et hebdos LTD/Z Archive Planning CS LTD/Planning 2017 ds dossier CS 

OR Lösung mit mawk

$ awk -F, -v usr=us_3 '$0 ~ "user:"usr{gsub(/"/, "");print $9}' input.txt 
/Volumes/raid-partages/POLE LTD/Plannings mensuels et hebdos LTD/Z Archive Planning CS LTD/Planning 2017 ds dossier CS 
+0

@MarkLambrichs Tx. Aber ich bekomme diesen Fehler 'awk: Aufruf undefined Funktion gensub Eingabe Datensatznummer 936, Datei test_acl_kling.csv Quellzeilennummer 1' Ich bin unter MacOS. Ich denke, dass diese Funktion von awk nicht implementiert ist. –

+0

Ich bin auch auf Macosx. Anscheinend hast du kein Gnu awk. Probieren Sie die zweite Lösung. –

+0

@MarkLambrichs !! Super genial !! es funktioniert so gut wie ich brauche. Tx viel –

0

letzten Findet user:something

$ sed -E 's/^("[^"]*",){8}"([^"]*)".*(user:[^ ]+).*/\2|\3/' file 
/Volumes/raid-partages/POLE LTD/Plannings mensuels et hebdos LTD/Z Archive Planning CS LTD/Planning 2017 ds dossier CS|user:c_faffa 

Findet user:ussomething

$ sed -E 's/^("[^"]*",){8}"([^"]*)".*(user:us[^ ]+).*/\2|\3/' file 
/Volumes/raid-partages/POLE LTD/Plannings mensuels et hebdos LTD/Z Archive Planning CS LTD/Planning 2017 ds dossier CS|user:us_3 

Findet user:us_3

$ sed -E 's/^("[^"]*",){8}"([^"]*)".*(user:us_3) .*/\2|\3/' file 
/Volumes/raid-partages/POLE LTD/Plannings mensuels et hebdos LTD/Z Archive Planning CS LTD/Planning 2017 ds dossier CS|user:us_3 

\1 acht Zellen enthält, \2 nineth. \3 enthält Benutzer.

+0

Benutzer: etwas => Problem, das ist nicht der Benutzer, den ich gezielt suchen möchte. Wenn ich den Benutzer ändere: [^] nach Benutzer: d_zeiger [^] funktioniert das nicht mehr –

+0

@ThomasLabarre hat Regex für bestimmten Benutzer hinzugefügt – pacholik

+0

'sed -E/^ (" [^ "] *",) {8} " ([^ "] *)". * (user: us [^] +). */\ 2 | \ 3/''funktioniert nicht mit meinem obigen Beispiel oder einem anderen' user: ussomething'. Ich habe etwas im Code vergessen? –

0

Verwenden Sie einen geeigneten CSV-Parser für CSV-Daten.

Wenn ich Ihre CSV zu beheben, kann ich Rubin tun verwenden:

ruby -rcsv -e ' 
    $stdin.each_line do |line| 
    CSV.parse(line) do |row| 
     result = row[9..-1].inject([row[8]]) do |res, elem| 
     if m = elem.match(/\buser:(\w+)/) 
      res << m[1] 
     end 
     res 
     end 
     puts CSV.generate_line result, :force_quotes => true 
    end 
    end 
' < file.csv 
"/Volumes/raid-partages/POLE LTD/Plannings mensuels et hebdos LTD/Z Archive Planning CS LTD/Planning 2017 ds dossier CS","d_zeiger","f_mure","us9","css_ltd","c_naegel","d_zeiger","us3_soins","css_ltd","extrahosp_s4_cadre","p_triantafyllidis","us_3","a_burglen","d_spiess","s_kling","hopjour_cadre_s4","mc_broggini","c_faffa" 
+0

Tx @ Glenn Jackman, aber ich muss bestimmte Benutzer finden. Mein obejectif ist, jedes Verzeichnis zu finden, zu dem es Zugang hat –

+0

Das war von deiner Frage nicht klar. –

Verwandte Themen