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