Сравнение переменных и замена шаблона - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь создать скрипт bash, который использует команду sed, чтобы заменить шаблон переменной, содержащей строку, или поставить пробел, если в переменной ничего нет.Я не могу найти хороший способ написать это и заставить это работать.Вот часть, где у меня есть проблемы:

a_flag=$(echo $a | wc -w)

if  [[ $a_flag = 0 ]]; then
    sed -i -e 's/#b/\\hspace{2cm}/g' source.tex
else
    sed -i -e "s/#b/$a/g" source.tex
fi

При выполнении этого условия всегда ложно.Я попытался [] или (()) для оператора if, но я просто не могу найти способ это исправить.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Здесь требуется только одно расширение параметра, чтобы заменить расширение $a на \hspace{2cm}, если расширение пустое.

sed -i -e "s/#b/${a:-\\\\hspace{2cm}}/g" source.tex

Вам нужен стек \, потому что естьвовлечены два раунда побега.Во-первых, сама оболочка сводит каждый \\ к одному буквальному обратному слешу.Затем sed также уменьшает каждую пару \\ до одного буквального обратного слэша.

0 голосов
/ 27 февраля 2019

Подсчет количества случаев появления чего-то кажется очень окольным путем, чтобы все равно подойти к этому.

case $a in
   *[A-Za-z0-9_]*) x='\\hspace{2cm}';;
   *)              x=$a;;
esac
sed -i "s/#b/$x/g" source.tex
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...