Sed打印字符串数字

时间:2014-07-07 10:04:59

标签: regex unix sed

有下一个配置文件:

[DEFAULT]
SenderCompID=PB
ConnectionType=acceptor
SocketAcceptPort=4444
FileStorePath=store
FileLogPath=/apps/test
HttpAcceptPort=3333
TransportDataDictionary=../../share/quickfix/FIXT11.xml
AppDataDictionary.FIX.4.0=../../share/quickfix/FIX40.xml
AppDataDictionary.FIX.4.1=../../share/quickfix/FIX41.xml
AppDataDictionary.FIX.4.2=../../share/quickfix/FIX42.xml
AppDataDictionary.FIX.4.3=../../share/quickfix/FIX43.xml
AppDataDictionary.FIX.4.4=../../share/quickfix/FIX44.xml
AppDataDictionary.FIX.5.0=../../share/quickfix/FIX50.xml
AppDataDictionary.FIX.5.0SP1=../../share/quickfix/FIX50SP1.xml
AppDataDictionary.FIX.5.0SP2=../../share/quickfix/FIX50SP2.xml
StartTime=00:00:00
EndTime=23:59:59
StartDay=sun
EndDay=sat

[SESSION]
TargetCompID=TUDOR-TEST
BeginString=FIX.4.4
DataDictionary=../../share/quickfix/FIX44.xml

[SESSION]
TargetCompID=SECOR-TEST
BeginString=FIX.4.4
DataDictionary=../../share/quickfix/FIX44.xml

我想使用sed打印SocketAcceptPort标记的值,在我的情况下是4444。 我使用了这个正则表达式,但没有运气:sed 's/SocketAcceptPort=[0-9]+//g' file.cfg 提前谢谢。

3 个答案:

答案 0 :(得分:2)

通过sed,

$ sed -n '/^SocketAcceptPort/s/.*=//p' file
4444

它搜索以SocketAcceptPort开头的行,如果找到,则删除=符号以外的所有字符。最后剩下的字符被打印出来了。在我们的例子中,它是4444

答案 1 :(得分:0)

如果您想尝试,可以使用awk执行此操作:

awk -F= '/SocketAcceptPort/ {print $2}' file 
4444

答案 2 :(得分:0)

另一个sed

sed -n 's/^SocketAcceptPort=\([0-9]\+\).*/\1/p' yourfile

如果-E中有sed选项,

sed -En 's/^SocketAcceptPort=([0-9]+).*/\1/p' yourfile