Bash 匹配后打印单词

Bash print word after match

我有一个存储文件输出的变量。在该输出中,我想打印 Database: 之后的第一个单词。我是正则表达式的新手,但这是我迄今为止尝试过的:

sed -n -e 's/^.*Database: //p' "$output"

当我尝试此操作时,出现 sed: can't read prints_output: File name too long 错误。

sed只接受文件名吗?我是 运行 对 desc formatted table 的配置单元查询,并将结果存储在 output 中,如下所示:

output=`hive -S -e "desc formatted table"`

output 然后设置为该结果:

...
# Detailed Table Information
Database:               sample_db
Owner:                  sample_owner
CreateTime:             Thu Feb 26 23:36:43 PDT 2015
LastAccessTime:         UNKNOWN
Protect Mode:           None
Retention:              0
Location:               maprfs:/some/location
Table Type:             EXTERNAL_TABLE
Table Parameters:
...

从表面上看,您应该使用:

hive -S -e "desc formatted table" |
sed -n -e 's/^.*Database: //p'

这将显示包含 Database: 的完整行。当你开始工作时,你也可以删除行中不需要的 material。

或者,您可以使用:

echo "$output" |
sed -n -e 's/^.*Database: //p'

或者,再次假设您使用的是 Bash,您可以使用:

sed -n -e 's/^.*Database: //p' <<< "$output"

除非您需要保留整个输出以供重新扫描,否则我会使用第一个。然后我可能会在文件中捕获输出(tee):

hive -S -e "desc formatted table" |
tee output.log |
sed -n -e 's/^.*Database: //p'

尝试使用 egrep:

egrep -oh 'Database:[[:blank:]][[:alnum:]]*[[:blank:]]' <output_file> | awk  '{print ;}'