Я предполагаю, что вы используете MacOS sed / BSD sed, попробуйте это:
sed -e '/^\([^,]*,\)\{10\}[^,]*$/s/,//; tLB' -e 'b' -e ':LB' -e 's/,/ /'
Я использовал --posix
для эмуляции, но не уверен, что он будет работать на вашей ОС:
$ cat file
DE, LAEIES,Vlzgstraat, 16,2260,NIJLEN,BELGI?,06346641,0636641,NL
Leonarfdsdy Dandfiel, Ingendfdfdfieur - Leon.ing,rombach, Hinderusen, 485,47580,SANKT VITH,BELGIQUE,0442345,2058560,FR
$ sed --posix -e '/^\([^,]*,\)\{10\}[^,]*$/s/,//; tLB' -e 'b' -e ':LB' -e 's/,/ /' file
DE, LAEIES,Vlzgstraat, 16,2260,NIJLEN,BELGI?,06346641,0636641,NL
Leonarfdsdy Dandfiel Ingendfdfdfieur - Leon.ing rombach, Hinderusen, 485,47580,SANKT VITH,BELGIQUE,0442345,2058560,FR
Обратите внимание, что вторую команду s
я заменил на space
, так как Leon.ing,rombah
без пробела внутри, простая полоска ,
станет Leon.ingrombach
.
Это тоже может сработать:
sed -e '/^\([^,]*,\)\{10\}[^,]*$/{' -e 's/,/ /' -e 's/,/ /}'
Кстати, я думаю, вам давно пора начать использовать GNU sed:
brew install gnu-sed
ln -s /usr/local/bin/gsed /usr/local/bin/sed
Эту проблему также проще использовать awk
вместо:
awk -F, 'NF==11{sub(",","");sub(","," ")}1' file
Заменить только при наличии 11 полей, разделенных запятыми.