Осторожно: даже не думайте об использовании опции -i
, пока не узнаете, что код работает. Вы можете все испортить!
Использование:
sed -e 's%[.]/%%g'
Вы можете выбрать разделитель в команде s///
, и когда регулярные выражения включают /
, это разумно чтобы выбрать что-то другое - я часто использую %
, когда это не фигурирует в тексте. -e
является необязательным. Использование [.]
для обнаружения действительной точки является одним из способов; Вы можете написать \.
, если хотите, но я аллергик c на обратную косую черту, которую можно избежать (если вам никогда не приходилось писать 16 обратной косой черты подряд, чтобы troff
сделал то, что вы хотите, у вас нет пострадал достаточно).
Имейте в виду, что опция -i
ведет себя по-разному в GNU sed
и BSD (macOS) sed
. Использование -i.bak
работает в обоих случаях (для произвольной непустой строки, такой как .bak
). В противном случае ваш код не переносим (что может иметь или не иметь значения для вас сейчас, но вполне может иметь значение позже).
У вас есть:
sed -i 's/[./,]//g'
Проблема в том, что что он ищет любой из символов .
, /
или ,
изолированно - поэтому он удаляет .
в .txt
, а также .
и /
в ./
. Вам нужно искать последовательные символы - как в моем предложенном решении.