假设我有这样的文件
adsf(2)
af(3)
g5a(65)
aafg(1245)
a(3)df
我怎样才能从(和)之间得到这个唯一的数字?
使用BASH
答案 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