вопрос о замене сед - PullRequest
       3

вопрос о замене сед

0 голосов
/ 05 мая 2010

у меня есть файл конфигурации xml

<tflow name="CENTRE"
     inputDTD="/JOBS/cnav/etc/jobReporting/batch/dtd/dtd-ContactCentre.dtd"
     inputFile="/JOBS/cnav/etc/jobReporting/import/2010.05.02.CONTACTCENTRE.xml"
                 logPath="/JOBS/cnav/etc/jobReporting/logs/"
                 rejectPath="/JOBS/cnav/etc/jobReporting/rejets/"/>
            <tflow name="SKILL"
                 inputDTD="/JOBS/cnav/etc/jobReporting/batch/dtd/dtd-Skill.dtd"
                 inputFile="/JOBS/cnav/etc/jobReporting/import/2010.05.02.SKILLS.xml"
                 logPath="/JOBS/cnav/etc/jobReporting/logs/"
                 rejectPath="/JOBS/cnav/etc/jobReporting/rejets/"/>

моя оболочка предназначена для изменения, например, '2010.05.02.SKILLS.xml' с 'newdate.SKILLS.xml'

В настоящее время я думаю о САС, я написал:

sed 's/(import\/)(\d{4}.\d{2}.\d{2})/$1$newdate/g' myfile.xml

это не работает, я тестирую шаблон с RegExr (сайт), что хорошо.

это проблема синтеза САС? спасибо.

Ответы [ 3 ]

2 голосов
/ 05 мая 2010

Большинство реализаций sed по умолчанию не поддерживают расширенные регулярные выражения, поэтому вам нужно использовать базовые регулярные выражения. Это означает, что вам нужно поставить обратную косую черту перед скобками и скобками, и вы не можете использовать класс \d. У вас также неверный синтаксис обратных ссылок - он должен быть \1, а не $1$. Итак, это должно выглядеть так:

 sed 's/\(import\/\)\([0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\)/\1newdate/' myfile.xml
1 голос
/ 05 мая 2010

Так много диалектов регулярных выражений вокруг ... Я думаю, sed не понимает \d. Кроме того, используйте \1 для bactracking и используйте двойные кавычки, если $newdate является переменной оболочки. И попробуйте -r использовать расширенное регулярное выражение.

Попробуйте что-то вроде этого

   sed -r "s/(import\/)([0-9]{4}\.[0-9]{2}\.[0-9]{2})/\1$newdate/g" myfile.xml
1 голос
/ 05 мая 2010

В зависимости от вашей реализации sed, вам, возможно, придется указать, что вы используете регулярное выражение. Какую ОС / версию Sed вы используете? Например, вам может понадобиться использовать аргумент -E.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...