我正在编写一个脚本,其命令执行如下:
cat /abc | grep -v ^# | grep -i root | sed -e '\''s/"//g'\'' | awk '\''{print $2}'\''
在SunOS上运行脚本时,我收到以下错误:
test: line 1: unexpected EOF while looking for matching `"'
test: line 3: syntax error: unexpected end of file
尝试了不同的选择..但没有运气。
需要有人帮我识别上述命令中缺少的内容。
答案 0 :(得分:2)
cat /abc | grep -v '^#' | grep -i root | sed -e '\''s/"//g'\'' | awk '\''{print $2}'\''
^ ^ ^ ^
你的问题在那里:
sed -e '\''s/"//g'\''
^ unmatched
答案 1 :(得分:0)
引用完全错了。为什么使用单引号,反斜杠,单引号,单引号,并始终按此顺序?无论如何,你有一个不带引号的双引号,所以shell希望你为引用的字符串添加一个结束引号,该引号以该开头双引号开头。
作为一种风格问题,您还应该丢失Useless Use of Cat,并考虑如何简化脚本。至少:
grep -v ^# /abc | grep -i root | sed -e 's/"//g' | awk '{print $2}'
......但在实践中
awk '/^#/ { next } /[Rr][Oo][Oo][Tt]/ { gsub ("\"",""); print $2 }' /abc
因为awk
和sed
脚本中的某些字符对shell有特殊含义,所以我们将它们放在单引号中。如果您需要在脚本中使用单引号,则需要对它们进行双引号;一个常见的模式是在双引号中的字符串旁边的单引号中包含一个字符串,如下所示:echo '"'"'"
。此回声"
(引用单引号)后紧跟'
(引用双引号)。
修改更新了引用问题的分析;添加代码示例;更正的代码示例。最终编辑更正了awk脚本中gsub
的引用,并添加了一个引用的小讨论。