删除除()包围的所有内容

时间:2011-07-07 09:55:27

标签: regex linux bash

假设我有这样的文件

adsf(2)

af(3)

g5a(65)

aafg(1245)

a(3)df

我怎样才能从(和)之间得到这个唯一的数字?

使用BASH

4 个答案:

答案 0 :(得分:4)

我想到了几个解决方案。其中一些正确处理空行,而另一些则没有。但是,使用grep -v '^$'sed '/^$/d'

删除这些内容很简单

SED

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

AWK

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

纯粹的bash

#!/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 :(得分:1)

while read line; do
    if [ -z "$line" ]; then
        continue
    fi  
    line=${line#*(}
    line=${line%)*}
    echo $line
done < file

答案 2 :(得分:1)

肯定lookaround

$ echo $'a1b(2)c\nd3e(456)fg7' | grep -Poe '(?<=\()[0-9]*(?=\))'
2
456

答案 3 :(得分:0)

另一个:

while read line ; do
  [[ $line =~ .*\(([[:digit:]]+)\).* ]] && echo "${BASH_REMATCH[1]}"
done < file