我使用扭矩来提交下面所示的测试脚本
#!/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
最后两个命令不起作用。看来字符“\”导致了错误。但为什么会出现这种情况。
最佳答案
服务器上的 sed
实现可能与本地的语法不同。
如果没有有关远程系统的详细信息,这只是推测;但请查找手册页并搜索启用扩展正则表达式语法的选项(通常是 -E
或 -r
;如果可用,可能会丢失正则表达式特殊符号之前的反斜杠然后)。
作为一种部分且明显的解决方法,aa*
相当于 a\+
,但不存在类似的分组解决方法。
也许还可以阅读 differences between POSIX Basic Regular Expression syntax (BRE) and ERE ;尽管您的 PBS 系统可能使用的东西甚至早于 POSIX(如果它是传统的大铁)。
如果您想编写可在 Linux、MacOS 以及 PBS 系统上拥有的任何庞然大物操作系统之间移植的代码,也许可以尝试 Perl 而不是 sed
。即使您只能依赖 Perl 4.x 构造,这个平台也比试图弄清楚如何编写可移植的 sed
脚本更加统一(也更加通用)。
perl -pe 's/(a+)//'
关于sed - “sed”命令在 PBS 脚本中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47629834/