Meine Datei hat das folgende Format:
this!,is!,another!,test,yes!
this!,is!,another!,column,yes!
no,not!,another!,column
Meine Ausgabe sollte sein:
test
column
no
Es sollte nicht das Zeichen „!“ enthalten.
Ich habe mehrere sed- und (e)grep-Befehle ausprobiert, aber keiner davon funktioniert richtig.
Antwort1
Versuchen Sie etwas wie Folgendes:
tr ',' '\n' < file.txt | grep -v \!
Antwort2
Vorausgesetzt, Sie haben es wirklich so gemeint ...
test
column
no
column
...hier ist eine awk
Lösung:
awk -v RS=, '{ for (i=1; i<=NF; i++) if($i !~ /!/) print $i; }'
Antwort3
erfordert GNU grep:
grep -oP '(?<=^|,)[^!]+(?=,|$)'
Basierend auf Ihrer Eingabe wird Folgendes gemeldet:
test
column
no
column
Wenn Sie nicht möchten, dass „Spalte“ zweimal erscheint:grep -oP '(?<=^|,)[^!]+(?=,|$)' | sort -u
Antwort4
Angenommen, Ihre Textdatei ist test.txt
, dann das Folgende:
for word in $(cat test.txt | sed -e 's/,/ /g'); do if [ ! "$( echo "$word" | grep '\!' )" == "$word" ]; then echo "$word"; fi; done
gibt mir:
test
column
no
column