我尝试了以下命令
ls | awk '{ sub(/.cpp/, " ", $0); print($0); }'
结果
awk: syntax error near line 1
awk: illegal statement near line 1
帮我找到错误
答案 0 :(得分:3)
每当收到错误消息时:
awk: syntax error near line 1
awk: illegal statement near line 1
这意味着你正在运行破旧的awk。在Solaris上,非常遗憾的是默认的/ bin / awk,你应该使用/ usr / xpg4 / bin / awk。 nawk是另一种选择,但并不接近POSIX合规性。
现在,在您的脚本中:
ls | awk '{ sub(/.cpp/, " ", $0); print($0); }'
将使用未损坏的awk执行正常,您应该将其重写为:
ls | awk '{ sub(/.cpp/, " "); print }'
而不是包含这些命令的默认$ 0参数。
最后 - /.cpp/正在使用'。'作为RE元字符,而不是文字句点字符,并且在第一次在行上看到它时将匹配.cpp
,因此如果您有一个名为fooxcppbar.cpp
的文件,则sub()会将其转换为{{1} }。那是你要的吗?如果没有,您可能需要这样做:
foo bar.cpp
如果存在,它仍然会在文件名前面ls | awk '{ sub(/\.cpp/, " "); print }'
错误地匹配。