输入:
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 }'
但它有点重,不是吗?
答案 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|.]*"