Sed 提取两个字符之间的字符串
假设我有一个字符串,它看起来像以下任意一个:Sed 提取两个字符之间的字符串,sed,awk,grep,Sed,Awk,Grep,假设我有一个字符串,它看起来像以下任意一个: nvidia-utils-beta 334.16-1 lib32-nvidia-utils-beta 334.16.1-2 我想提取它,这样它就会产生: 334.16 334.16.1 …分别 怎么做 p.s.我更喜欢非cut | cut解决方案。使用awk: awk '{print $2}' file | awk -F - '{print $1} awk -F '[ -]+' '{ print $(NF-1) }' 使用awk: awk '
nvidia-utils-beta 334.16-1
lib32-nvidia-utils-beta 334.16.1-2
我想提取它,这样它就会产生:
334.16
334.16.1
…分别
怎么做
p.s.我更喜欢非cut | cut
解决方案。使用awk
:
awk '{print $2}' file | awk -F - '{print $1}
awk -F '[ -]+' '{ print $(NF-1) }'
使用awk
:
awk '{print $2}' file | awk -F - '{print $1}
awk -F '[ -]+' '{ print $(NF-1) }'
以下是使用
awk
awk '{split($NF,a,"-");print a[1]}' file
334.16
334.16.1
它取最后一个字段,用-
将其拆分,然后打印拆分的第一部分
将所有字段按空格或
-
分隔,然后打印最后一个字段。以下是使用awk
awk '{split($NF,a,"-");print a[1]}' file
334.16
334.16.1
它取最后一个字段,用-
将其拆分,然后打印拆分的第一部分
这将所有字段按空格或
-
划分,然后打印最后一个字段。当我看到“提取”时,grep首先出现:
grep -Po '\S*(?=-\d+$)' file
或
测试:
当我看到“摘录”时,grep首先出现:
grep -Po '\S*(?=-\d+$)' file
或
测试:
使用
sed的可能解决方案
:
sed -r 's/.+\s(.+)-.+/\1/' file
sed -ne 's/.* \(\<[0-9.]\{2,\}\).*/\1/p'
例如:
echo "nvidia-utils-beta 334.16-1" | sed -r 's/.+\s(.+)-.+/\1/'
334.16
echo "nvidia-utils-beta 334.16.1-2" | sed -r 's/.+\s(.+)-.+/\1/'
334.16.1
使用
sed的可能解决方案
:
sed -r 's/.+\s(.+)-.+/\1/' file
sed -ne 's/.* \(\<[0-9.]\{2,\}\).*/\1/p'
例如:
echo "nvidia-utils-beta 334.16-1" | sed -r 's/.+\s(.+)-.+/\1/'
334.16
echo "nvidia-utils-beta 334.16.1-2" | sed -r 's/.+\s(.+)-.+/\1/'
334.16.1
A
GNU awk
解决方案:
awk '{print gensub(/-[0-9]+/,"","g",$NF)}' file
A
GNU awk
解决方案:
awk '{print gensub(/-[0-9]+/,"","g",$NF)}' file
使用
awk
:
awk '{print $2}' file | awk -F - '{print $1}
awk -F '[ -]+' '{ print $(NF-1) }'
使用grep
:
grep -o '\<[0-9.]\{2,\}'
使用perl
:
perl -ne '/\b([0-9.]{2,})/ && print $1, "\n"'
使用
awk
:
awk '{print $2}' file | awk -F - '{print $1}
awk -F '[ -]+' '{ print $(NF-1) }'
使用grep
:
grep -o '\<[0-9.]\{2,\}'
使用perl
:
perl -ne '/\b([0-9.]{2,})/ && print $1, "\n"'
猛击
whileread-r包版本;做
回显“${version%%-*}”
完成bash
whileread-r包版本;做
回显“${version%%-*}”
这是一个有效的解决方案,所以我不会投反对票,但你刚刚让阿霍、温伯格和克尼汉哭了@jaypal,我不会投票支持两个awk命令解决方案。Vanda,无论如何,这是一个很好的尝试。这是一个有效的解决方案,所以我不会投反对票,但你刚刚让aho,weinberger和kernighan哭了@jaypal,我不会投票支持两个awk命令解决方案。Vanda,无论如何,这是一个很好的尝试。grep-Po'\s\K[^-]*'
似乎是迄今为止最紧凑的一个。grep-Po'\s\K[^-]*'
似乎是迄今为止最紧凑的一个。