我有两种消息:
Board2Port1TS239.124.3.20:3000
Board4UserTagZDF_pippo_MFPService8011
如果我收到消息1(它包含Port
),则输出应为Board2Port1
如果我收到消息2(它不包含Port
),则输出应为Board4
Board
和Port
的数字不固定。
/bin/echo "Board2Port1TS239.124.3.20:3000" | /bin/sed -e '/Port/ s/???/???/ ; /Port/! s/???/???/'
我无法找到解决方案......任何人都可以帮助我吗?感谢
非常感谢Novocaine的完美解决方案。
我还有另一个与前一个问题直接相关的问题:
通过shell解决方案没问题:
[root@test3 snmptt]# /bin/echo 'Board2Port1TS239.124.3.21:3000' | /bin/sed -r 's/^(Board.(Port.)*).*/\1/g'
Board2Port1
现在我必须在SNMPTT配置中使用此命令。它不起作用。 这是snmptt.debug报告
Done performing substitution on PREEXEC line: /bin/echo 'Board2Port1TS239.124.3.21:3000' | /bin/sed -r 's/^(Board.(Port.)*).*/\1/g'
PREEXEC command: /bin/echo 'Board2Port1TS239.124.3.21:3000' | /bin/sed -r 's/^(Board.(Port.)*).*/\1/g'
command output: Board2Port1TS239.124.3.21:3000
配置文件命令是:
PREEXEC /bin/echo '$p2' | /bin/sed -r 's/^(Board.(Port.)*).*/\1/g'
输出" Board2Port1TS239.124.3.21:3000"等于输入($ p2)。我不会为什么这么做。
提前致谢
答案 0 :(得分:1)
sed -r 's/^(Board.(Port.)*).*/\1/g' File
答案 1 :(得分:0)
假设您每次都收到一条消息:
sed '/:/{s/\([0-9]\)[^0-9].*:/\1/;q};s/\([0-9]\)[^0-9].*/\1/'
应该有效:
kent$ sed '/:/{s/\([0-9]\)[^0-9].*:/\1/;q};s/\([0-9]\)[^0-9].*/\1/' <<< "Board2Port1TS239.124.3.20:3000"
Board23000
kent$ sed '/:/{s/\([0-9]\)[^0-9].*:/\1/;q};s/\([0-9]\)[^0-9].*/\1/' <<< "Board4whatever3000"
Board4
答案 2 :(得分:0)
假设输入看起来真的像你的例子,Port
和UserTag
是固定字符串:
sed -r '/Port/{s/TS.*//;n};s/UserTag.*//'