如何在bash中从字符串中剪切一些文本?

时间:2009-12-31 06:31:54

标签: bash string

Bash脚本

我有一个字符串:

tcp 6 0 CLOSE src = 111.11.111.111 dst = 222.22.222.22 sport = 45478 dport = 5000 packets = 7 bytes = 474 src = 111.11.111.111 dst = 222.22.222.22 s port = 5000 dport = 45478 packets = 8 bytes = 550 [ASSURED] mark = 0 use = 1

我需要剪切src IP地址111.11.111.111, 如何?

3 个答案:

答案 0 :(得分:3)

这是一种快速而肮脏的方法: 通过sed管道,如下所示:

sed -e 's/.*src=\([^ ]*\).*/\1/'

答案 1 :(得分:2)

您不需要这个外部工具。如果您从命令输出中获取字符串,您可能希望

string="$(command)"
string="${string#* src=}"
string="${string%% dst=*}"

第一行捕获所有输出。第二行切断了以src=结尾的最短前缀。第三行中断了以dst=结尾的最长后缀。

Shell globbing比regexps更容易!

答案 2 :(得分:1)

你可以使用awk。下面的片段获取所有src ip,而不仅仅是它的一个实例。

<command> | awk '{for(i=1;i<=NF;i++){if($i~/src/){sub("src=","",$i);print $i}}}'