как добавить выравнивание строки к предыдущей строке в linux?

Оболочка POSIX

Поскольку вы ищете арифметические тесты, а регистр не выполняет арифметические действия, if-thenкажется естественным подходом:

if [ "$cmils" -lt 320 ]
then
        cawg="??"
elif [ "$cmils" -le 403 ]
then
        cawg="25 AWG"
elif [ "$cmils" -le 509 ]
then
        cawg="24 AWG"
elif [ "$cmils" -le 641 ]
then
        cawg="23 AWG"
fi

Только Bash

Я предпочитаю портативные решения, но некоторым нравится арифметический синтаксис bash:

if ((cmils < 320))
then
        cawg="??"
elif ((cmils <= 403))
then
        cawg="25 AWG"
elif ((cmils <= 509))
then
        cawg="24 AWG"
elif ((cmils <= 641))
then
        cawg="23 AWG"
fi

Этот синтаксис более мощный и более хрупкий, чем синтаксис POSIX. Чтобы понять почему, попробуйте этот код после установки cmils=cmils.

-1
28.12.2019, 19:05
2 ответа

С помощью Gnu sed вы можете сделать это. Я использую вашу команду find и изменил в ней часть sed.

$ find ${location} -type f -name "*.xml" -path "*/adult/*" -exec sed -i -e '/<\/autoReferenceLines>/!b' -e 'h;s/\S.*/<ztv>0<\/ztv>/;H;g' {} +

Или растянуть с помощью экранированных символов новой строки, но по-прежнему считать одной строкой:

$ find ${location} -type f \
   -name "*.xml" -path "*/adult/*" \
   -exec sed -i \
    -e '/<\/autoReferenceLines>/!b' \   
    -e 'h;s/\S.*/<ztv>0<\/ztv>/;H;g' \
   {} +;

Рабочий:

Написанный вами findпрекрасно выбирает необходимые файлы, которые необходимо отредактировать с помощью sed.

Команда sed просматривает строки, в которых присутствует строка автоматической ссылки. Он хранит копию:hдо того, как мы начнем над ней операцию. Затем, начиная с первого непробельного символа \Sдо конца строки, мы стираем все это. Так что теперь у нас остались начальные пробелы (, если они есть ). Пока мы это делаем, мы также вставляем нужную строку ztv. Итак, теперь у нас есть такое же количество начальных пробелов плюс желаемая строка.

Затем мы добавляем эту только что созданную строку к исходной сохраненной строке Hи помещаем ее gв пространство шаблонов.

Параметр -iпри использовании с несколькими файлами для gnu sed подразумевает -s, поэтому мы не указываем его явно.

2
28.01.2020, 05:07

Эта команда должна делать то, что вы хотите:

find ${location} -type f -name "*.xml" -path "**/adult/**" -exec grep -q '</autoReferenceLines>' {} \; -exec perl -i"*" -ne 'print; print "$1<ztv>0</ztv>\n" if (m[^(\s*).*</autoReferenceLines>])' {} \;
1
28.01.2020, 05:07

Теги

Похожие вопросы