Удалить все, кроме окруженных () - PullRequest
2 голосов
/ 07 июля 2011

Допустим, у меня есть такой файл

adsf(2)

af(3)

g5a(65)

aafg(1245)

a(3)df

Как я могу получить из этого числа только между (и)?

с использованием BASH

Ответы [ 4 ]

4 голосов
/ 07 июля 2011

На ум приходит пара решений. Некоторые из них обрабатывают пустые строки правильно, другие нет. Тривиально удалить их, используя grep -v '^$' или sed '/^$/d'.

СЭД

sed 's|.*(\([0-9]\+\).*|\1|' input

AWK

awk -F'[()]' '/./{print $2}' input
2
3
65
1245
3

чистый удар

#!/bin/bash

IFS="()"

while read a b; do
    if [ -z $b ]; then
        continue
    fi
    echo $b
done < input

и, наконец, используя tr

cat input | tr -d '[a-z()]'
1 голос
/ 07 июля 2011

Положительный Lookaround :

$ echo $'a1b(2)c\nd3e(456)fg7' | grep -Poe '(?<=\()[0-9]*(?=\))'
2
456
1 голос
/ 07 июля 2011
while read line; do
    if [ -z "$line" ]; then
        continue
    fi  
    line=${line#*(}
    line=${line%)*}
    echo $line
done < file
0 голосов
/ 08 июля 2011

Еще один:

while read line ; do
  [[ $line =~ .*\(([[:digit:]]+)\).* ]] && echo "${BASH_REMATCH[1]}"
done < file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...