посоветуйте, пожалуйста, как удалить все символы в файле, кроме чисел и "."
примечание - решение должно соответствовать примеру в целевом файле (см. Пробелы в этом примере), поэтому другие символы (не точка или числа) будут заменены одним пробелом
, например, в исходном файле:
192.0.22.1++0.1
e32)5.500.5.5*kjcdr
##@$1.1.1.1+++jmjh
1.1.1.1333
33331.1.1.1
@5.5.5.??????
~3de.ede5.5.5.5
1.1.1.13444r54
192.9.30.174
&&^#%5.5.5.5
:5.5.5.5@%%^^&*
:5.5.5.5:
**22.22.22.22
172.78.0.1()*5.4.3.277
3.3.3ki.3.
целевой файл после удаления всех символов, кроме цифр и "." устав
192.0.22.1 0.1
32 5.500.5.5
1.1.1.1
1.1.1.1333
33331.1.1.1
5.5.5.
. 5.5.5.5
1.1.1.13444 54
192.9.30.174
5.5.5.5
5.5.5.5
5.5.5.5
22.22.22.22
172.78.0.1 5.4.3.277
3.3.3 .3.
Используйте инвертированную группу [^. 0-9]
, что означает все, кроме точки и чисел. Чтобы очистить infile
, выполните:
sed 's/[^.0-9][^.0-9]*/ /g' infile
Чтобы заменить последовательности отрицаемой группы одним пробелом, вы можете использовать обновленный ответ.
sed 's/[^.0-9]\+/ /g;s/^ //g;s/ $//g' in-file > target-file
объяснение:
s / [^ .0-9] \ + / / g
заменяет следующие друг за другом символы одним пробелом s / ^ // g
удаляет начальные пробелы s / $ // g
удаляет завершающие пробелы