当我在 Solaris 中执行此命令时遇到问题:
grep -Ev "(^#|^EBM_SERVER|^$)" ${EBM_CONF} | awk -F, '{print $2"|"}' | tr -d "\n" | sed 's/|$//g'
我收到此错误消息:
egrep:illegal option -- E
usage: egrep [-bchilnsv] [-e exp] [-f file] [string] [file] ...
egrep:syntax error
答案1
在 Solaris 上,在默认环境中,您将获得过时的实用程序。
要获得更多现代实用程序,您需要更新$PATH
:
PATH=`getconf PATH`:$PATH export PATH
这将为您提供 90 年代的实用程序,而不是 80 年代的实用程序(这并不夸张......)。
那么你的grep
意志就会表现得更像一个标准grep
。
或者,您可以使用egrep
代替grep -E
.
但在这里,awk
作为 的超集,你根本egrep
不需要。egrep
< "$EBM_CONF" awk -F, '! /^#|^EBM_SERVER|^$/ {print $2"|"}' |
tr -d "\n" |
sed 's/|$//g'
要使用 来连接行|
,最好使用paste
.您的最后两个命令可以替换为paste -s -d '|' -
.或者你可以用以下方式完成整个事情awk
:
< "$EBM_CONF" awk -F, '! /^#|^EBM_SERVER|^$/ {printf "%s", sep $2; sep = "|"}'