2017-02-17 2 views
-3

У меня эти строки в моем файле input.txt.Как отредактировать текст внутри тегов XML-стиля из оболочки или PowerScript?

your group image is <gpimage>image1</gpimage> some text some text some text <gpimage>pic2</gpimage> some text some text some text <gpimage>image3</gpimage> 
<gpimage>img4</gpimage> <gpimage>photo5</gpimage> some text some text some some text some text some some text some text some <gpimage>image6</gpimage>. 

Я хочу, чтобы добавить строку в «.png» <gpimage>image1</gpimage> так, что содержание выглядит следующим образом <gpimage>image1.png</gpimage>

PS: Мой выходной файл должен иметь все элементы с «.png» прилагается к <gpimage> элементов. Как мне это сделать?

+4

StackOverflow не является службой написания сценариев. Пожалуйста, покажите, что вы пробовали, каков ваш ожидаемый результат и каковы результаты ваших попыток. Будьте откровенны в отношении того, что вы просите; если вы хотите указать указатели на дополнительную информацию, дайте понять, какую информацию вы ищете. –

+0

@JeffZeitlin Привет, я давно использовал сценарий оболочки, но я знаю, что это можно легко сделать в скрипте оболочки. Фактически я делаю замену вручную с помощью редактора Notepad ++. – user5561286

+0

@JeffZeitlin Пожалуйста, помогите мне, я поражен этим вещь – user5561286

ответ

0

Я тестировал это на OSX, но должен работать и на Linux (конечно, не в PowerShell).

cat input.txt | sed -E 's!<gpimage>([^<]*)</gpimage>!<gpimage>\1.png</gpimage>!g' 
+1

Нет, он не будет работать как в PowerShell, но у PowerShell есть возможности, необходимые для этого почти так же, как ваше решение bash/sed. –

+0

@Elisiano Petrini ваше решение работает только для image1 не для других, таких как image2 user5561286

+0

@ user5561286 Вы добавили последний модификатор 'g' в sed? –

1

Похоже, у вас есть рабочий ответ для сценария оболочки. Если вы собираетесь попробовать это в Powershell, вы можете использовать это, чтобы получить тот же результат

(Get-Content -Raw input.txt).Replace('<gpimage>image1</gpimage>', '<gpimage>image1.png</gpimage>') 

Я жёстко значение для image1 в этом, так как вы сказали, что это был единственный один ты хотел изменить, но если бы вы хотели чтобы изменить что-нибудь между тегами вы могли бы использовать это:

(Get-Content -Raw input.txt) -Replace '<gpimage>([^<]*)</gpimage>','<gpimage>$1.png</gpimage>' 
+0

вы используете(), тогда вы можете удалить -raw;) – Esperento57

+0

спасибо @ Esperento57 от очень быстрого тестирования с помощью меры-меры до того, как я отправил сообщение. Я заметил, что было небольшое повышение производительности, сохраняя необработанную строку вместо того, чтобы делать замену итерации через объекты. Разница была всего в нескольких миллисекундах между двумя после дюжины прогонов в каждом направлении, но с большими файлами она могла иметь значение, поэтому я решил, что я оставил данные необработанные :) Мои тесты также выполнялись на машине Linux, хотя результаты могли быть разными в Windows –

1

решение сценария Shell, я думаю, что это может быть также достичь при замене </gpimage> с .png</gpimage> помощью команды sed, как описано в предыдущих ответах. Я тестировал это на Mac Version 2.7.1 (388), и он работает. Вероятно, это будет работать и на других терминалах unix.

cat input.txt | sed 's/<\/gpimage>/.png<\/gpimage>/g' 
Смежные вопросы