我使用扭矩提交显示的测试脚本
#!/bin/bash
#PBS -N test
#PBS -l nodes=1:ppn=1
#PBS -q ser
#PBS -V
#PBS -S /bin/bash
sed 's/a//' <<< aaabbbaaa
sed 's/\(a\)//' <<< aaabbbaaa
sed 's/a\+//' <<< aaabbbaaa
期望输出应为
aabbbaaa
aabbbaaa
bbbaaa
但实际上当我使用qsub提交此文件时,输出变为
aabbbaaa
aaabbbaaa
aaabbbaaa
最后两个命令不起作用。似乎角色'\'导致了错误。但为什么会这样呢。
答案 0 :(得分:2)
服务器上的sed
实现可能与本地语法不同。
没有关于远程系统的细节,这是一种温和的推测;但查找手册页并搜索启用扩展正则表达式语法的选项(通常为-E
或-r
;如果可用,可能会在正则表达式特殊符号之前丢失反斜杠。
作为部分明显的解决方法,aa*
相当于a\+
,但没有类似的解决方法可用于分组。
也许还可以阅读differences between POSIX Basic Regular Expression syntax (BRE) and ERE;虽然有可能你的PBS系统正在使用甚至超过POSIX的东西,如果它是传统的大铁。
如果您想编写可在Linux,MacOS和您在PBS系统上拥有的任何庞然大恐龙OS之间移植的代码,可以尝试使用Perl而不是sed
。即使您只能依赖Perl 4.x构造,这个平台也比试图找出如何编写可移植sed
脚本更加统一(也更通用)。 / p>
perl -pe 's/(a+)//'