如何从文件中剪切两种搜索模式(包括搜索模式)之间的字符串?

时间:2018-04-25 10:22:23

标签: linux shell unix

我有一个名为{ "result": [ { "@type": "d", "@version": 0, "documentReads": 1, "fullySortedByIndex": false, "documentAnalyzedCompatibleClass": 1, "recordReads": 1, "fetchingFromTargetElapsed": 0, "indexIsUsedInOrderBy": false, "currentMatch": null, "compositeIndexUsed": 1, "current": "#169:839", "depth": 0, "involvedIndexes": [ "user._id" ], "limit": -1, "matched": { "$ORIENT_DEFAULT_ALIAS_0": "#1770:0", "theEdge": "#1817:1889" }, "evaluated": 1, "elapsed": 1490.7661, "resultType": "collection", "resultSize": 1, "@fieldTypes": "documentReads=l,documentAnalyzedCompatibleClass=l,recordReads=l,fetchingFromTargetElapsed=l,compositeIndexUsed=l,current=x,involvedIndexes=e,evaluated=l,elapsed=f" } ], "notification": "Query executed in 1.521 sec. Returned 1 record(s)" } 的文件,其中包含以下数据:

applications.txt

此文件中的字符串包含我想要显示的主机名,如下所示:

MOB-x01gmobdb2a-PRD-IBG
TDST-AB-x01gtdsdb1a-UAT-CST
ABC-x01gabcdb2a-PRD-CBG
PQR-x01gpqrdb1a-UAT-IBG
XYZA-GZ-x01gxyzdb2a-PRD-TS
UVW-x01guvwdb1a-UAT-IBG

上述服务器中很少有UAT,很少有PROD服务器。如您所见,主机名夹在两种模式之间:

  1. 第一个模式是x01gmobdb2a x01gtdsdb1a x01gabcdb2a x01gpqrdb1a x01gxyzdb2a x01guvwdb1a (仅限小写x),
  2. 第二种模式是-x-UAT。无论第一个模式和第二个模式之间的字符串是什么,我们都需要显示。
  3. 注意:从第一个模式-PRD也应该在输出中显示。示例主机名为:x

2 个答案:

答案 0 :(得分:1)

一个使用awk:

$ awk 'match($0,/-x[^-]*/){print substr($0,RSTART+1,RLENGTH-1)}' file
x01gmobdb2a
x01gtdsdb1a
x01gabcdb2a
x01gpqrdb1a
x01gxyzdb2a
x01guvwdb1a

答案 1 :(得分:1)

这可以是您的解决方案。但没有x模式。我只选择了PRD和UAT。

cat applications.txt | grep -e PRD -e UAT |awk -F"-" '{print $(NF-2)}'