假设您已获得此C shell脚本:
setenv MYVAR "-l os="\""redhat4.*"\"" -p -100"
setenv MYVAR `perl -pe "<perl>"`
替换为将替换&#34; -p -100&#34;用&#34; -p -200&#34;在MYVAR中,如果不存在则添加它,如果可能的话,使用一个衬垫。
答案 0 :(得分:2)
你想要的东西看起来像
perl -e' \
use Getopt::Long qw( :config posix_default ); \
use String::ShellQuote; \
GetOptions(\my %opts, "l=s", "p=s") or die; \
my @opts; \
push @opts, "-l", $opts{l} if defined($opts{l}); \
push @opts, "-p", "-100"; \
print(shell_quote(@opts)); \
' -- $MYVAR
首先,您需要解析命令行。这需要知道它们所针对的应用程序的参数的格式。
例如,-n
是以下选项:
perl -n -e ...
然而,-n
不是以下选项:
perl -e -n ...
上面,我在POSIX模式下使用了Getopt :: Long。您可能需要调整设置或使用完全不同的解析器。
其次,您需要生成csh
个文字。
我尝试解决csh
有缺陷的引用时遇到了不好的经历,所以我会把这些细节留给你。上面,我使用String :: ShellQuote的shell_quote
生成sh
(而不是csh
)文字。你需要调整。
当然,一旦你做到这一点,你需要将结果返回到环境变量unmangled。我不知道csh
是否有可能。我再次将csh
引用留给你。
答案 1 :(得分:0)
该主题与内容不对应,但我认为如果有人发布主题问题的答案可能会有用。所以这是perl-oneliner:
echo "my_string" | perl -pe 's/my/your/g'