sed - “sed”命令在 PBS 脚本中无法正常工作

标签 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

最后两个命令不起作用。看来字符“\”导致了错误。但为什么会出现这种情况。

最佳答案

服务器上的 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/

相关文章:

python - 在使用 mpi4py 的并行环境中第一次迭代后,在 for 循环中使用 Popen 的系统调用失败

logging - PBS 脚本 -o 文件到多个位置

bash - 使用 awk 匹配特定的字母重复模式

bash - 使用 sed 提取大括号中的子字符串

linux - 如何使用 sed 在一行中切换注释

c - MPI_AllGather 未正确收集...所有元素最终的值相同?

regex - Linux 提取特定字符串之间的文本

Python 64 位无法在 Windows HPC 上正确启动 (0xc00000cc)

c - MPI 和 C : loop through file of commands in file

fortran - 带扭矩运行程序