Обрезка длины определенной строки с помощью grep - PullRequest
0 голосов
/ 17 января 2019

Допустим, у нас есть строка "test123" в текстовом файле.
Как мы можем вырезать только "test12" или, скажем, за "test123" стоит другой мусор, такой как test123x19853, и мы хотим вырезатьout "test123x"?

Я пробовал с grep -a "test123.\{1,4\}" testasd.txt и так далее, но просто не могу понять, как это правильно.
Я тоже искал, например, но так и не нашел то, что искал.

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Что вам нужно, это -o, который распечатывает только соответствующие вещи:

$ echo "test123x19853"|grep -o "test.\{1,4\}"
test123x

$ echo "test123x19853"|grep -oP "test.{1,4}"
test123x

-o, --only-match - показывать только часть строки, соответствующую PATTERN

0 голосов
/ 17 января 2019

выражение:

kent$  x="test123x19853" 
kent$  echo $(expr "$x" : '\(test.\{1,4\}\)')
test123x
0 голосов
/ 17 января 2019

Если вы в порядке с awk, то попробуйте выполнить следующее (не для этого нужно искать непрерывные вхождения алфавитов, а затем непрерывные вхождения цифр, не ограничивая его 4 или 5).

echo "test123x19853" |  awk 'match($0,/[a-zA-Z]+[0-9]+/){print substr($0,RSTART,RLENGTH)}'

Если вы хотите искать только 1–4 цифры после 1-го непрерывного вхождения алфавитов, попробуйте выполнить следующее (моя awk - старая версия, поэтому, используя --re-interval, вы можете удалить ее, если у вас последняя версия ittoo) .

echo "test123x19853" | awk --re-interval 'match($0,/[a-zA-Z]+[0-9]{1,4}/){print substr($0,RSTART,RLENGTH)}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...