比赛后打击打印字

时间:2015-02-27 07:28:37

标签: regex bash sed 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:
...

2 个答案:

答案 0 :(得分:2)

表面上,您应该使用:

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

这将显示包含Database:的完整行。如果你能够正常工作,你也可以消除生产线上不需要的材料。

或者,您可以使用:

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'

答案 1 :(得分:0)

尝试使用egrep:

egrep -oh 'Database:[[:blank:]][[:alnum:]]*[[:blank:]]' <output_file> | awk  '{print $2;}'
相关问题