Мой файл имеет следующий формат:
this!,is!,another!,test,yes!
this!,is!,another!,column,yes!
no,not!,another!,column
Мой вывод должен быть таким:
test
column
no
Он не должен содержать символ «!».
Я перепробовал несколько команд sed и (e)grep, но ни одна из них не работает.
решение1
Попробуйте что-то вроде этого:
tr ',' '\n' < file.txt | grep -v \!
решение2
Предполагая, что вы действительно имели в виду...
test
column
no
column
...вот awk
решение:
awk -v RS=, '{ for (i=1; i<=NF; i++) if($i !~ /!/) print $i; }'
решение3
требуется GNU grep:
grep -oP '(?<=^|,)[^!]+(?=,|$)'
на основе ваших данных, который сообщает:
test
column
no
column
Если вы не хотите, чтобы слово «column» появлялось дважды:grep -oP '(?<=^|,)[^!]+(?=,|$)' | sort -u
решение4
Предположим, что ваш текстовый файл выглядит test.txt
следующим образом:
for word in $(cat test.txt | sed -e 's/,/ /g'); do if [ ! "$( echo "$word" | grep '\!' )" == "$word" ]; then echo "$word"; fi; done
дает мне:
test
column
no
column