'sed'命令在PBS脚本中无法正常工作

时间:2017-12-04 09:10:24

标签: sed hpc pbs 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

最后两个命令不起作用。似乎角色'\'导致了错误。但为什么会这样呢。

1 个答案:

答案 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+)//'