Ich habe die folgende Datei ausgegeben, die manipuliert werden muss (bereinigt)sed mehrere Muster und löschen Rest
"2016-02-29;tracking;teamA;Name;45,0;7,0;315,0;659;"this is some free text";"911 Some Category";"again #pattern2 some free text #pattern1 #pattern3"
Ich muss filtern und mehrere Muster zu halten und den Rest eines Teils der Zeile zu löschen. Die Zeile sollte wie folgt aussehen:
"2016-02-29;tracking;teamA;Name;45,0;7,0;315,0;659;"this is some free text";"911 Some Category";"#pattern2 #pattern1 #pattern3"
Also muss ich nur einen Teil der Zeile manipulieren und den Rest behalten.
fand ich Möglichkeiten für mehrere Muster wie
sed -e "s/#pattern1/#pattern1/g" -e "s/#pattern2/#pattern2/g"
und ich fand Wege zu suchen, alles, aber das Muster zu löschen:
sed -e "s/.*#pattern1.*/#pattern1/g"
EDIT: meine Lösung im Moment:
Ich nehme den Teil der Zeile mit awk (delimiter;), egrep -o und füge ihn an das Original an. Sieht wie folgt aus:
#!/bin/bash
FILE=$1
REGEXP="#(pattern1|pattern2|)"
paste $FILE <(cat $FILE |awk -F';' '{print$11}' | while read a; do a=$(echo $a | egrep -io "${REGEXP}" | sort -u) ; echo ";"${a//$'\n'/ } ; done)
Während es nicht schwierig ist, ein sed-Skript zu schreiben, um dies zu tun, wäre es wahrscheinlich ein Chaos und es gibt viel bessere Alternativen. – 123
Bearbeiten Sie Ihre Frage, um eine [mcve] einzuschließen. Wie es aussieht, ist es ziemlich vage. –
Ich denke, ich habe mich geärgert. Das Problem ist, dass ich nicht die ganze Linie eingefügt habe und dies zu Missverständnissen geführt hat. Ich füge es in die Frage ein. – JackOverflow