Я хочу удалить все нечисловые символы из набора (~2000) из .txt файлов.
Например, file1.txt:
Sydney 33
Castle hill 47
Lake's town hill 79
должен стать, file1.txt:
33
47
79
Я хочу изменить содержание каждого текстового файла, не распечатать вывод на экране.Спасибо!
С 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
Использование:
$ 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
С tr
(и принятие Вас не хочет удалять новые строки),
$ tr -dc '[0-9\n]' < file1.txt
33
47
79
Учитывая структуру Вашего файла, Вы могли также использовать awk
распечатать последнее разграниченное пробелом поле:
$ awk '{print $NF}' file1.txt
33
47
79