удаление числового значения из строки

1

У меня есть файл из 2000 строк и 1 столбец

1007_s_at1
1007_s_at2
1007_s_at3
1007_s_at4
1007_s_at5
1007_s_at6
1007_s_at7
1007_s_at8
1007_s_at9
1007_s_at10

выглядит как выше, я хочу удалить последнее числовое значение после "at". В принципе, любое число в последнем случае должно быть усечено.

Я пробовал такие вещи, как расщепление их, а затем их воссоздание, но это просто усложняет проблему, и я далеко от ответа.

Не могли бы вы предложить что-то в bash или shell или python или perl, чтобы решить эту проблему.

Требуется выход, как показано ниже.

   1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at
    1007_s_at

спасибо

  • 1
    Это тривиальная проблема для регулярных выражений. Что вы пробовали?
Теги:

7 ответов

3
Лучший ответ
sed -i -e 's/[[:digit:]]*$//' filename
  • 0
    Здравствуй! В чем разница с g и без g.sed -i -e 's / [[: digit:]] * $ // g' filename Спасибо
  • 1
    g означает «глобальный», что означает, что он будет применять подстановку столько раз, сколько соответствует шаблону. Поскольку я использую якорь ( $ ), флаг не имеет смысла, и я удалил его.
Показать ещё 1 комментарий
5

С Perl:

perl -p -e "s/\d+$//" input.txt > output.txt
3

Просто передайте string.digits в .rstrip() чтобы удалить цифры из правой части ваших строк:

import string
with open('inputfile') as infile, open('outputfile') as outfile:
    for line in infile:
        outfile.write(line.rstrip().rstrip(string.digits) + '\n')
1

питон

Просто разделите все цифры с конца.

>>> "1007_s_at10".rstrip('01234567890')
'1007_s_at'
1

Если изменяется только число в конце, вы можете сцепить:

>>> a = '1007_s_at1'
>>> a[0:9]
'1007_s_at'
0

Никто еще не предложил решение bash:

shopt -s extglob
while read line; do
    echo "${line%%*([0-9])}"
done < filename
0

Если вы используете Linux или Unix, просто одно решение для линейки:

perl -i.bak -pe 's/\d+$//g' file.txt

если Windows:

perl -i.bak -pe "s/\d+$//g" file.txt

Если вы уже знаете, что он делает, тогда хорошо и хорошо, в противном случае, очень просто, переключатель -i с .bak сначала создаст резервную копию file.txt и file.txt.bak его file.txt.bak.

Опция -p затем перебирает записи в файле и печатает/сохраняет результат в file.txt после того, как s/\d+$//g удаляет цифры в конце.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню