获取特殊2个字符之间的字符串

时间:2018-03-18 08:59:42

标签: bash awk sed

输入

random abcD .and$ 5487>1.2.3.4:random fghij & 9101112

输出

1.2.3.4

到目前为止我做了什么

sed -e 's/'>'\(.*\)':'/\1/'  

我也尝试了

sed -e 's/>\(.*\):/\1/'  

note :我可以用awk:

来做
awk 'BEGIN { FS = ">" } ; { print $2 }' | awk 'BEGIN { FS = ":" } ; { print $1 }'

但它有点重,不是吗?

2 个答案:

答案 0 :(得分:2)

解决方案第一: 这个简单的sed可能对您有帮助。

sed 's/.*>//;s/:.*//'  Input_file

解决方案第二: 现在添加awk解决方案。

awk '{gsub(/.*>|:.*/,"")} 1'  Input_file

解决方案3: 使用另一个awk字段分隔符逻辑。

awk -F'[>:]' '{print $2}'  Input_file

解决方案第四: 使用另一个sed和后向引用逻辑。

sed 's/\(.*>\)\([^:]*\)\(.*\)/\2/'  Input_file

答案 1 :(得分:0)

如果有其他字符“:”和“>”在该行中,您确定要匹配的子字符串仅包含“。”。和数字[0到9],最好使用:

run()

或更好:

 sed "s/.*>\([0-9|.][0-9|.]*\):.*/\1/g"

或(以匹配第一次出现):

 sed "s/.*>\([0-9|.]\+\):.*/\1/g"

你也可以使用:

 sed "s/.*>\([0-9|.]\+\):.*/\1/"

测试:

  grep -o ">[0-9|.]*:" |  grep -o "[0-9|.]*"