Вы можете выполнить отрицание:
~/(xy|xy[^z]*)
или короче:
~/xy(|[^z]*)
Другое решение с awk
:
awk -F, 'sub("^[0-9]+\\s","",$3)' OFS=, file
Вывод:
qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52
Объяснение:
-F,
: установить запятую в качестве поля ввода separator
OFS =,
: установить запятую в качестве разделителя выходного поля (по умолчанию пробел)
sub ("^ [0-9] + \\ s", "", $ 3)
: удалить числа, за которыми следует пробел в начале строки $ 3
, и распечатать текущую строку (поскольку "печать" является действием по умолчанию в awk
)
Таким образом вы можно отредактировать нужный столбец и распечатать все остальные (их вообще может быть много).
Согласно показанным данным это может быть следующее sed
sed -r 's/,[0-9 ]+ /,/' file.csv
В случае изменения данных регулярное выражение следует изменить на более сильное
{ {1}} В awk
:
awk '{FS="[, ]"; OFS=","; print $1, $2, $4}' filename
В sed
:
sed 's/^\(.*,\)[0-9]* \([^,]*\)$/\1\2/' filename
Я использовал awk
:
awk -F"[ ,]" '{print $1","$2","$4 }' yourfile
Результат:
qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52