2011-09-20 2 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_20110901094550 с WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat в разделе [TEMP.s_m_upd_salions_rqthk] Но почему-то его не дает мне ожидаемый результат. Даже замена WHG_STATUS_SITEENTSEQCHAIN_20110901094550 по разделу [TEMP.s_m_update_BUS_spec].

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. Но я wud хочу использовать 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/WorkingDir/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/WorkingDir/ограничения/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 \/ограничение \ /WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat | g "Input_File ..... Но даже тогда его не работает как ожидалось ..... – Chkusi

+1

@Четан Сиддагири, ок ??? Теперь попробуйте то, что я разместил. – ikegami

+0

Ниже приведены работы для tat 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;» RQT_PROCESS.prm perl -p -i -e 's | \ $ \ $ SRC_STAT_RN =. * | \ $ \ $ SRC_STAT_RN = WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat | g; s | \ $ InputFile_RN_RQT =/edwload/rqt/workingdir/ограничение/. * | \ $ InputFile_RN_RQT =/edwload/rqt/WorkingDir/ограничение/WHG_STATUS_SITEENTSEQCHAIN_20110901999999.dat | г;» RQT_PROCESS.prm – Chkusi

Смежные вопросы