'sed' 命令在 PBS 脚本中不能正常工作
'sed' command does not work normally in PBS scripts
我使用torque提交下图所示的测试脚本
#!/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 的东西,如果它是遗留的 big iron。
如果您想编写可在 Linux、MacOS 和 PBS 系统上的任何庞然大物恐龙 OS 之间移植的代码,也许尝试使用 Perl 而不是 sed
。即使您只能依赖 Perl 4.x 构造,与试图弄清楚如何编写可移植的 sed
脚本相比,这是一个更加统一(也更加通用)的平台。
perl -pe 's/(a+)//'
我使用torque提交下图所示的测试脚本
#!/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 的东西,如果它是遗留的 big iron。
如果您想编写可在 Linux、MacOS 和 PBS 系统上的任何庞然大物恐龙 OS 之间移植的代码,也许尝试使用 Perl 而不是 sed
。即使您只能依赖 Perl 4.x 构造,与试图弄清楚如何编写可移植的 sed
脚本相比,这是一个更加统一(也更加通用)的平台。
perl -pe 's/(a+)//'