【发布时间】:2015-04-29 20:19:51
【问题描述】:
我有一个存储文件输出的变量。在该输出中,我想打印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:
...
【问题讨论】:
-
如果没有设置
$output的代码和调用脚本的方式,错误消息就没有意义。您在哪个平台上运行 13 个字符的文件名太长?即使是早期版本的 Unix 也支持文件名中包含 14 个字符。也许您应该显示运行bash -x your-script prints_output或任何命令调用的结果(-x选项显示 Bash 认为它正在做什么,或多或少)。 -
@JonathanLeffler 这可能是我的第一个错误。我正在尝试将变量传递给
sed,而不是文件名。我已经更新了 OP 以更好地反映我正在尝试做的事情。