2011-09-20 69 views
0

我有以下内容的文件:Perl命令行为不如预期?

[TEMP.s_m_update_BUS_spec] 
$$SRC_STAT_RA=WHG_STATUS_SITEENTSEQCHAIN_20110901094550.dat 
$InputFile_RA_SPE=/edwload/rqt/workingdir/status_spe/WHG_STATUS_SITEENTSEQCHAIN_20110901094550.dat 

[TEMP.s_m_upd_salions_rqthk] 
$$SRC_STAT_RN=WHG_STATUS_SITEENTSEQCHAIN_20110901094550 
$InputFile_RN_RQT=/edwload/rqt/workingdir/restriction/WHG_STATUS_SITEENTSEQCHAIN_20110901094550.dat 

我使用下面的perl命令只是WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat取代WHG_STATUS_SITEENTSEQCHAIN_20110901094550在部分[TEMP.s_m_upd_salions_rqthk]但不知何故,它不给我预期的结果。即使[TEMP.s_m_update_BUS_spec]WHG_STATUS_SITEENTSEQCHAIN_20110901094550正在被替换。

perl -p -i -e "s|\$\$SRC_STAT_RN=.*|\$\$SRC_STAT_RN=WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat|g;s|\$InputFile_RN_RQT=\/edwload\/rqt\/workingdir\/restriction\/.*|\$InputFile_RN_RQT=\/edwload\/rqt\/workingdir\/restriction\/WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat|g" Input_File 

请让我知道在上面的命令中所需的修改。所有的命令都可以使用SED命令。但我想用perl。

回答

0

究竟是不是你想要的工作?在我的机器上,运行perl代码后,文件如下所示:

[TEMP.s_m_update_BUS_spec] $$SRC_STAT_RA=WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat 

[TEMP.s_m_upd_salions_rqthk] $$SRC_STAT_RN=WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat 

这不是您所期望的吗?

编辑

尝试修改您的命令:

perl -p -i -e "s|\$\$SRC_STAT_RN=.*?|\$\$SRC_STAT_RN=WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat|gmx;s|\$InputFile_RN_RQT=/edwload/rqt/workingdir/restriction/.*?|\$InputFile_RN_RQT=/edwload/rqt/workingdir/restriction/WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat|gmx" Input_File 

,看看是否如预期的结果:

[TEMP.s_m_update_BUS_spec] 
$$SRC_STAT_RA=WHG_STATUS_SITEENTSEQCHAIN_20110901999999.datWHG_STATUS_SITEENTSEQCHAIN_20110901094550.dat 
$InputFile_RA_SPE=WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat/edwload/rqt/workingdir/status_spe/WHG_STATUS_SITEENTSEQCHAIN_20110901094550.dat 

[TEMP.s_m_upd_salions_rqthk] 
$$SRC_STAT_RN=WHG_STATUS_SITEENTSEQCHAIN_20110901999999.datWHG_STATUS_SITEENTSEQCHAIN_20110901094550 
$InputFile_RN_RQT=WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat/edwload/rqt/workingdir/restriction/WHG_STATUS_SITEENTSEQCHAIN_20110901094550.dat 
+0

我试过你上面发布的命令,但没有给出预期的结果。我的预期结果应如下............................................ .................... [TEMP.s_m_update_BUS_spec] $$ SRC_STAT_RA = WHG_STATUS_SITEENTSEQCHAIN_20110901094550.dat $ InputFile_RA_SPE =/edwload/RQT /工作目录/ status_spe/WHG_STATUS_SITEENTSEQCHAIN_20110901094550.dat [TEMP.s_m_upd_salions_rqthk] $$ SRC_STAT_RN = WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat $ InputFile_RN_RQT =/edwload/RQT /工作目录/限制/ WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat – Chkusi

+0

感谢您的答复!!我很欣赏it..Btw请帮我问题,我已经在上面解释过了。 – Chkusi

1

你运行的程序是

s|$$SRC_STAT_RN=.*|$$SRC_STAT_RN=WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat|g; s|$InputFile_RN_RQT=\/edwload\/rqt\/workingdir\/restriction\/.*|$InputFile_RN_RQT=\/edwload\/rqt\/workingdir\/restriction\/WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat|g 

有相当数量的$应该逃脱但不是。如果您使用单引号而不是双引号,会更简单。你可能试过:

perl -i -pe' 
    s{\$\$SRC_STAT_RN=.*}{\$\$SRC_STAT_RN=WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat}g; 
    s{\$InputFile_RN_RQT=/edwload/rqt/workingdir/restriction/.*}{\$InputFile_RN_RQT=/edwload/rqt/workingdir/restriction/WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat}g; 
' Input_File 
+0

我试图通过转义特殊字符来达到此目的:perl -p -i -e“s | \ $ \ $ SRC_STAT_RN =。* | \ $ \ $ SRC_STAT_RN = WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat | g; S | \ $ InputFile_RN_ RQT = \/edwload \/rqt \/workingdir \/restriction \ /.* | \ $ InputFile_RN_RQT = \/edwload \/rqt \/workingdir \/restriction \ /WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat | g“Input_File .....但即使那么它不按预期工作..... – Chkusi

+1

@Chethan Siddagiri,好吗?现在尝试我发布的内容。 – ikegami

+0

下面是工作正常。感谢为达尔 perl -i -pe的{\ $ \ $ SRC_STAT_RN =。*} {\ $ \ $ SRC_STAT_RN = WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat} g; s {\ $ InputFile_RN_RQT =/edwload/rqt /workingdir/restriction/.*}{\$InputFile_RN_RQT=/edwload/rqt/workingdir/restriction/WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat}g;” RQT_PROCESS.prm perl -p -i -e | \ $ \ $ SRC_STAT_RN =。* | \ $ \ $ SRC_STAT_RN = WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat | g; s | \ $ InputFile_RN_RQT =/edwload/rqt/workingdir/restriction/。* | \ $ InputFile_RN_RQT =/edwload/RQT /工作目录/限制/ WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat |克;” RQT_PROCESS。prm – Chkusi