Удалите все нечисловые символы из текстовых файлов

Я хочу удалить все нечисловые символы из набора (~2000) из .txt файлов.

Например, file1.txt:

Sydney  33
Castle hill  47
Lake's town hill  79

должен стать, file1.txt:

33
47
79

Я хочу изменить содержание каждого текстового файла, не распечатать вывод на экране.Спасибо!

1
задан 18 July 2018 в 05:36

3 ответа

С sed:

sed 's/[^[:digit:]]\+//g'
  • [^[:digit:]]\+ соответствия один или несколько (+) нецифры ([^[:digit:]]) и мы заменяем это пустой строкой, глобально (g)

Использовать sed -i (или sed -i.bak для хранения оригинала с a .bak расширение) для оперативного редактирования файла.


То же самое с awk sub(Regex, Replacement, Input) функция:

awk 'sub("[^[:digit:]]+", "", $0)'

Использовать --inplace для оперативного редактирования файла.


Пример:

% cat file.txt                 
Sydney  33
Castle hill  47
Lake's town hill  79

% sed 's/[^[:digit:]]\+//g' file.txt               
33
47
79

% awk 'sub("[^[:digit:]]+", "", $0)' file.txt
33
47
79
2
ответ дан 7 December 2019 в 13:22

Использование:

$ echo "Jim 5" > file.txt
$ echo "Jane 3" >> file.txt
$ sed -i 's/[^0-9]//g' file.txt
$ cat file.txt
5
3

Используя Ваши данные тестирования:

$ cat file1.txt
Sydney 33
Castle hill 47
Lake's town hill 79

$ sed -i 's/[^0-9]//g' file1.txt

$ cat file1.txt
33
47
79
0
ответ дан 7 December 2019 в 13:22

С tr (и принятие Вас не хочет удалять новые строки),

$ tr -dc '[0-9\n]' < file1.txt
33
47
79

Учитывая структуру Вашего файла, Вы могли также использовать awk распечатать последнее разграниченное пробелом поле:

$ awk '{print $NF}' file1.txt
33
47
79
0
ответ дан 7 December 2019 в 13:22

Другие вопросы по тегам:

Похожие вопросы: