Как искать и заменять текст в XML-файле с помощью SED? - PullRequest
0 голосов
/ 23 декабря 2011

Мне нужно преобразовать список XML-файлов в папке из UTF-16 в UTF-8, удалить спецификацию и затем заменить ключевое слово в файле из UTF-16 в UTF-8.

Я использую cygwin для запуска сценария оболочки bash, чтобы выполнить это, но я никогда раньше не работал с SED и мне нужна помощь!

Я нашел один вкладыш SED для удаления спецификации, теперь мне нужен другой для замены текста с UTF-16 на UTF-8 в заголовке xml.

Это то, что я имею до сих пор:

  #!/bin/bash
mkdir -p outUTF8

#Convert files to unix format.
find -exec dos2unix {} \;

#Use a for loop to convert all the xml files.
for f in `ls -1 *.xml`; do
    sed -i -e '1s/^\xEF\xBB\xBF//' FILE
    iconv -f utf-16 -t utf-8 $f > outUTF8/$f
    sed 's/UTF-16/UTF-8/g' $f > outUTF8/$f
    echo $f
done

Однако эта строка:

sed 's/UTF-16/UTF-8/g' $f > outUTF8/$f

висит сценарий. Есть идеи относительно правильного формата для этого?

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

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

for filename in *.xml; do
    sed -i".bak" -e '1s/^\xEF\xBB\xBF//' "$filename"
    iconv -f utf-16 -t utf-8 "$filename" > outUTF8/"$filename"
    sed -i 's/UTF-16/UTF-8/g' outUTF8/"$filename"
done

Первый sed сделает резервную копию ваших исходных файлов с расширением .bak. Затем он будет использовать iconv для преобразования файла и сохранения его во вновь созданном каталоге с тем же именем файла. Наконец, вы внесете изменения в файл с помощью sed, чтобы удалить текст.

1 голос
/ 23 декабря 2011

2 вещи

  1. Насколько велик ваш файл $ f, если он действительно очень большой, для его завершения может потребоваться много времени.1008 * Оппс, я вижу, у вас есть echo $f в нижней части вашего цикла.Переместите его перед командой sed, чтобы увидеть, есть ли пробелы в именах файлов.

2a :-).ИЛИ просто измените все ссылки на $f на "$f" для защиты от пробелов.

Надеюсь, это поможет.

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