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

Индикатор сообщений появляется только тогда, когда приложение зарегистрировалось для его использования; по умолчанию приложения не регистрируются, что означает, что индикатор сообщений скрыт. Однако некоторые приложения, такие как Thunderbird, регистрируются с индикатором, как только вы их открываете, и не оставляете видимого способа их удаления.

Мое решение - сбросить список приложений, зарегистрированных на индикаторе, до по умолчанию (пустой), затем запустите индикатор, чтобы обновить его.

Откройте терминал и скопируйте / вставьте следующее:

dconf reset /com/canonical/indicator/messages/applications
killall indicator-messages-service
1
задан 18 July 2018 в 05:36

11 ответов

С sed:

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

Используйте sed -i (или sed -i.bak для сохранения оригинала с расширением .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
ответ дан 18 July 2018 в 17:19

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

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

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

$ awk '{print $NF}' file1.txt
33
47
79
0
ответ дан 18 July 2018 в 17:19

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

$ 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
ответ дан 18 July 2018 в 17:19

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

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

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

$ awk '{print $NF}' file1.txt
33
47
79
0
ответ дан 20 July 2018 в 16:42
  • 1
    спасибо, мне это нравится, но я не хочу печатать выходные данные на экране, я хочу изменить содержимое каждого txt-файла - спасибо за вашу помощь – user2861089 18 July 2018 в 04:31
  • 2
    @ user2861089, в этом случае я бы выбрал один из вариантов sed (хотя последние версии GNU awk aka gawk также могут делать исправления на месте) – steeldriver 18 July 2018 в 04:38

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

$ 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
ответ дан 20 July 2018 в 16:42

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

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

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

$ awk '{print $NF}' file1.txt
33
47
79
0
ответ дан 20 July 2018 в 16:51
  • 1
    спасибо, мне это нравится, но я не хочу печатать выходные данные на экране, я хочу изменить содержимое каждого txt-файла - спасибо за вашу помощь – user2861089 18 July 2018 в 04:31
  • 2
    @ user2861089, в этом случае я бы выбрал один из вариантов sed (хотя последние версии GNU awk aka gawk также могут делать исправления на месте) – steeldriver 18 July 2018 в 04:38

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

$ 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
ответ дан 20 July 2018 в 16:51

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

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

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

$ awk '{print $NF}' file1.txt
33
47
79
0
ответ дан 23 July 2018 в 10:07
  • 1
    спасибо, мне это нравится, но я не хочу печатать выходные данные на экране, я хочу изменить содержимое каждого txt-файла - спасибо за вашу помощь – user2861089 18 July 2018 в 04:31
  • 2
    @ user2861089, в этом случае я бы выбрал один из вариантов sed (хотя последние версии GNU awk aka gawk также могут делать исправления на месте) – steeldriver 18 July 2018 в 04:38

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

$ 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
ответ дан 23 July 2018 в 10:07

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

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

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

$ awk '{print $NF}' file1.txt
33
47
79
0
ответ дан 31 July 2018 в 17:05
  • 1
    спасибо, мне это нравится, но я не хочу печатать выходные данные на экране, я хочу изменить содержимое каждого txt-файла - спасибо за вашу помощь – user2861089 18 July 2018 в 04:31
  • 2
    @ user2861089, в этом случае я бы выбрал один из вариантов sed (хотя последние версии GNU awk aka gawk также могут делать исправления на месте) – steeldriver 18 July 2018 в 04:38

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

$ 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
ответ дан 31 July 2018 в 17:05

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

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