我有一个存储文件输出的变量。在该输出中,我想在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:
...
答案 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;}'