使用sed从一行中提取一些字符串

时间:2013-04-11 07:17:34

标签: shell sed

我有一个字符串,

. . . . . . . . . . . .starting  i-8f1031ed .. started  aashish.292 ec2-23-20-213-73.compute-1.amazonaws.com in 36 s

我想提取,

ec2-2-2-2-7.compute-1.amazonaws.com

使用sed。你能提供一种方式吗?

5 个答案:

答案 0 :(得分:3)

awk

怎么样?
echo '...' | awk '{print $NF}'

或者如果你坚持sed

sed 's/.* \(.*\)/\1/'

事实证明,问题中的字符串并不是你真正想要的,即你不是在最后一个"字#34;之后。在这种情况下,你可以逃脱:

sed 's/.* \(.*amazonaws.com\).*/\1/

答案 1 :(得分:2)

echo "..." | sed 's/.*\(ec2[^ ]*\).*/\1/'

答案 2 :(得分:1)

你也可以使用grep:

grep -o 'ec[^ ]*' <<<". . . . . . . . . . . .starting  i-8f1031ed .. started  aashish.292 ec2-23-20-213-73.compute-1.amazonaws.com in 36 s"

输出:

ec2-23-20-213-73.compute-1.amazonaws.com

答案 3 :(得分:1)

有问题的字符串必须有一些可识别的模式,如果我们假设字符串以.com结尾,那么这应该有效: - sed 's|^.* \([^ ]*\.com\).*$|\1|g'

答案 4 :(得分:0)

假设字符串始终以ec2开头:

sed 's/\(ec2.*\)/\1/'