1

Мне нужно найти конкретное число, которое идет после строки в текстовом файле. Например, у меня есть эти данные:

yyy = 80rr, xxx = 136rr, zzz = 95rr    

и я хочу скопировать числа между yyy и rr , xxx и rr , zzz rr . Тогда я хочу повторить эти цифры. Является ли это возможным?

2 ответа2

1

Лучше всего использовать только инструменты Windows, возможно, Powershell. Однострочник: в PS уже:

$(sls '[0-9]+' filename.txt -allm).Matches.Value

Из CMD.EXE:

powershell -c "$(sls '[0-9]+' test.txt -allm).Matches.Value"

Для текстового файла (называемого filename.txt), содержащего только вашу строку, это печатает следующее:

80
136
95

Я проверил его на файлах с несколькими строками и несколькими номерами в строке, и он все еще работает, печатая каждое число в отдельной строке. Теперь, если у вас есть какие-либо другие числа в файле, которые вы не хотите отображать, они тоже будут отображаться. Чтобы избежать этого, мы можем просто сопоставить числа, заканчивающиеся на rr:

$(sls '[0-9]+rr' test.txt -allm).Matches | foreach {$_.Value.trim('r')}

или же

powershell -c "$(sls '[0-9]+rr' test.txt -allm).Matches | foreach {$_.Value.trim('r')}"
0

В Linux вы можете использовать команду gawk . Я сделал так:

    echo "yyy = 80rr, xxx = 136rr, zzz = 95rr" | gawk '{ match($0, /.*= ([0-9]+).*= ([0-9]+).*= ([0-9]+)/, array); printf "%d %d %d\n",array[1], array[2], array[3]}';

Результат был:

    80 136 95

В твоем случае:

    cat file.txt | gawk '{ match($0, /.*= ([0-9]+).*= ([0-9]+).*= ([0-9]+)/, array); printf "%d %d %d\n",array[1], array[2], array[3]}';

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .