Эй, молодые программисты на linux имеют место здесь быть или где?
Короче, одна персона с хорошим педикюром почему-то спросила меня - как убрать трэйлинг спэйсес
внутри XML tag.
Например имеем следущую строку в XML file: <FIRST NAME>Вася </FIRST NAME>
и ещё много других строк с другими тагами и трэйлинг спэйсами внутри тагов.
Надо получить <FIRST NAME>Вася</FIRST NAME>
Вопрос - как в linux убрать эти трейлинг спейсы внутри тагов? Есть ли какая-то линукс команда или рутина. Про sed говорить не надо, нах
Re: программисты на linux ....question
Добавлено: Вт фев 06, 2024 7:05 am
caltrain
Например, вызвать в командой строке
xsltproc transform.xsl input.xml > output.xml
В XSL использовать normalize-space()
Когда XSL файл будет готов, сделать так чтобы он подавался на вход процессора в виде строки
#: '
for file in $INPUT_FOLDER/*.xml
do
echo "filename with path: $file"
filename=${file##*/}
echo "filename: $filename"
sed 's/[[:space:]]*$//' "$file" > "$OUTPUT_FOLDER/$filename"
done
#'
Какую линукс команду можно ввести что бы убрать трейлинг спейсы внутри тага?
Re: программисты на linux ....question
Добавлено: Вт фев 06, 2024 7:56 am
Mad Hatter
Как уже сказал, sed.
Учи реджексы пригадицца
Re: программисты на linux ....question
Добавлено: Вт фев 06, 2024 8:48 am
Nab
sed убирает трейлинг спейсес вне тагов.
Если есть идея, как убрать трейлинг спейсы внутри тага и конкретно с примером (или на примере) который я привёл - би май гест, азевайс - учи как читать поставленную задачу, нах
Re: программисты на linux ....question
Добавлено: Вт фев 06, 2024 8:49 am
VikKur
как уже сказали sed...
но...любой "tool" на линуксе справится с задачей - perl/awk/ex...ksh/bash/sh наконец )
пс щас попробую
псс в вышепреведённом примере кривой regular expression и он цепляет всё
Re: программисты на linux ....question
Добавлено: Вт фев 06, 2024 9:01 am
assassello
В самом простом случае нужно найти \s+(</) и заменить на $1.
Как-то так. Любой тул, который умеет regex find/replace подойдет.
Re: программисты на linux ....question
Добавлено: Вт фев 06, 2024 9:33 am
VikKur
sed 's/\(>[^<]*\) \+\(<[^>]*>\)/\1\2/g' "$FILE" > "$OUTPUT"
input - <FIRST NAME>Vasya </FIRST NAME>
output <FIRST NAME>Vasya</FIRST NAME>
ps chatGPT помог ) хотя и отказался сделать это на ksh.ну и не надо
Re: программисты на linux ....question
Добавлено: Вт фев 06, 2024 9:54 am
assassello
А почему не
sed 's/\s*\(<\/\)/\1/g' "$FILE" > "$OUTPUT"
Re: программисты на linux ....question
Добавлено: Вт фев 06, 2024 10:03 am
VikKur
assassello писал(а): ↑Вт фев 06, 2024 9:54 am
А почему не
sed 's/\s*\(<\/\)/\1/g' "$FILE" > "$OUTPUT"
сработало тоже и вроде понятнее. chatGPT наверное туповат, а я мне лень возиться )
Re: программисты на linux ....question
Добавлено: Вт фев 06, 2024 10:38 am
Uzito
Только если в XML будет [CDATA] который трогать нельзя оно его отформатирует тоже.
Re: программисты на linux ....question
Добавлено: Вт фев 06, 2024 10:42 am
Mad Hatter
Кстати да. XML та ещё фигня.
Тогда уже Питоном ударить по DOMу
Re: программисты на linux ....question
Добавлено: Вт фев 06, 2024 2:03 pm
self
Mad Hatter писал(а): ↑Вт фев 06, 2024 10:42 am
Кстати да. XML та ещё фигня.
Тогда уже Питоном ударить по DOMу
Самое правильное решение
Загрузить исходник любым парсером и тут же выгрузить обратно