Sed或Perl命令

时间:2014-10-23 20:05:19

标签: perl unix awk sed

我有如下数千条数据线。这是一个字符串。我正在寻找一种方法来只删除里面的数据,所以它只是这样。 " [ActiveOrBackup:ACTIVE] [状态:运营]" ActiveOrBackUp:可以转为ACTIVE模式或BACKUP模式。和状态:可以转向运营和不可访问。这可能吗 ?谢谢。

我的字符串看起来像这样。 $ MyString的

[samplingStatus: OK]  [Version: Wind6.4.0.A4]  [ActiveOrBackup: ACTIVE]  [Status: OPERATIONAL]  [downloads: 0]  [state: OFF]

我的目标。 $ AIMRESULT

[ActiveOrBackup: ACTIVE]  [Status: OPERATIONAL] 
当它是备份服务器时

或以下。

[ActiveOrBackup: BACKUP]  [Status: OPERATIONAL] 

我的grep字符串代码如下所示。这抓住了$ MYSTRING。我的目标是让它看起来像$ AIMRESULT。有没有perl / awk / sed命令,我可以管道,让我这样做?谢谢。

egrep "name=|sampling" Tmp1.txt > test1 | sed 's/\(.*\)table/table/g' test1 | cut -d "@" -f 4 | cut -d ")" -f 1 > test

2 个答案:

答案 0 :(得分:1)

假设您的"字段分隔符"真的是2间隔:

AIMRESULT=$( perl -F'\s{2}' -lane 'print join "  ", grep {/\[(?:ActiveOrBackup|Status):/} @F' <<< "$MYSTRING" )

注意,尽量避免使用ALL_CAPS_VARS的习惯 - 有一天你会写PATH=/foo/bar,然后想知道为什么你的脚本坏了。

答案 1 :(得分:0)

也许我错过了一些东西,但是不知道这样做了吗?

sed -e "s/^.*ActiveOrBackup: \([A-Z]*\).*Status: \([A-Z]*\).*$/[ActiveOrBackup: \1] [Status: \2]/"