【问题标题】:'sed' command does not work normally in PBS scripts'sed' 命令在 PBS 脚本中无法正常工作
【发布时间】:2017-12-04 09:10:24
【问题描述】:

我用扭力提交的测试脚本如图所示

#!/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 hpc pbs torque


    【解决方案1】:

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

    【讨论】:

    • Perl 5 于 1994 年发布。如果你能使用它,对你有好处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 2013-03-06
    相关资源
    最近更新 更多