使用bash从文本中获取特定字符串

时间:2014-10-13 07:13:17

标签: linux bash unix clearcase

我的输出看起来像这样:

Tag: abrodov_linux_vlsi07_test1
  Global path: /net/vposeidon02/vlsifs/vlsi02/vlsi_ccstore/07/abrodov/abrodov_linux_vlsi07_test1.vws
  Server host: ta1vlsi07
  Region: tlv_unix
  Active: YES
  View tag uuid:26075e8c.4e2e11e4.9cc0.a4:ba:db:3c:fc:0e
View on host: ta1vlsi07
View server access path: /net/vposeidon02/vlsifs/vlsi02/vlsi_ccstore/07/abrodov/abrodov_linux_vlsi07_test1.vws
View uuid: 26075e8c.4e2e11e4.9cc0.a4:ba:db:3c:fc:0e
View owner: abrodov

我需要获得服务器主机,在此示例中为ta1vlsi07

我写了一些有效的命令来获取View uuid,但是在这种情况下它没有用,这里是命令:

ct lsview -l abrodov_linux_vlsi07_test1 |grep -i 'Server host:' | cut -d" " -f3

我得到的输出是Server而不是主机名。

3 个答案:

答案 0 :(得分:1)

这是因为线路开头的前导空间

使用

ct lsview -l abrodov_linux_vlsi07_test1 |grep -i 'Server host:' | cut -d" " -f5

将产生输出

ta1vlsi07

此外,如果您不确定前导空格的数量,请使用

 ct lsview -l abrodov_linux_vlsi07_test1 | grep -o 'Server host:.*' | cut -d" " -f3

-o选项选择字符串中匹配的部分

答案 1 :(得分:1)

如果它支持-P参数,则可以在单个grep命令中执行此操作。

ct lsview -l abrodov_linux_vlsi07_test1 | grep -oP 'Server host:\s*\K\S+'

<强>解释

  • Server host:匹配字符串Server host:
  • \s*匹配零个或多个空格。
  • \K放弃以前匹配的字符进行打印。所以在我们的情况下Server host:加上以下空格被丢弃。
  • \S+现在,以下一个或多个非空格字符将匹配并打印出来。

答案 2 :(得分:1)

如果需要更短更快的命令版本,您可以使用awk

 $ ct lsview -l abrodov_linux_vlsi07_test1 | awk '/Server host:/ {print $3}'