Почему мой файл заполняется extbar после запуска sed? - PullRequest
0 голосов
/ 31 марта 2012

На основании информации https://tex.stackexchange.com/questions/48933/which-symbols-need-to-be-escaped-in-context, Я хочу подготовить файл для использования с ConTeXt.Мне нужно сделать несколько замен:

  • Заменить # на \#.
  • Заменить % на \percent.
  • Заменить |с \textbar.
  • Заменить $ на \textdollar.
  • Заменить _ на \textunderscore.
  • Заменить ~ на \textasciitilde.
  • Заменить { на \textbraceleft.
  • Заменить } на \textbraceright.

Я попытался использовать информацию из Замена"#", "$", "%", "&" и "_" с "\ #", "\ $", "\%", "\ &" и "\ _" длявыполните следующие замены:

sed -i 's/\&/\\\&/g' ./File.csv
sed -i 's/\#/\\\#/g' ./File.csv
sed -i 's/\%/\\\percent/g' ./File.csv
sed -i 's/\|/\\\textbar/g' ./File.csv
sed -i 's/\$/\\\textdollar/g' ./File.csv
sed -i 's/\_/\\\textunderscore/g' ./File.csv
sed -i 's/\~/\\\textasciitilde/g' ./File.csv
sed -i 's/\{/\\\textbraceleft/g' ./File.csv
sed -i 's/\}/\\\textbraceright/g' ./File.csv

К сожалению, когда я запускаю эти сценарии, весь файл меняется на кучу странных букв, цифр и слов "extbar" везде.

  • Как я могу сделать эти замены?
  • Почему после выполнения этих команд в моем файле появляется «extbar»?

Ответы [ 3 ]

1 голос
/ 31 марта 2012

Используйте четыре обратных слеша вместо, чтобы убежать. Они оцениваются дважды. После этого у вас есть символ \t в качестве замены, за которым следует строка 'extbar' (из \ textbar)

1 голос
/ 31 марта 2012

когда вы делаете

sed -i 's/|/\\\textbar/g' ./File.csv
sed reads it as s/|/\\\textbar/g  \\ becomes \ and \t becomes tab character.

Попробуйте

sed -i "s/|/\\\textbar/g" 

или

sed -i 's/|/\\textbar/g'
1 голос
/ 31 марта 2012

Это может работать для вас:

cat <<\!  >Village.sed
s/&/\\&/g
s/#/\\#/g
s/%/\\percent/g
s/|/\\textbar/g
s/\$/\\textdollar/g
s/_/\\textunderscore/g
s/~/\\textasciitilde/g
s/{/\\textbraceleft/g
s/}/\\textbraceright/g
!
sed -f Village.sed ./File.csv

Не уверен, почему «extbar» появляется в вашем файле, вероятно, для строки s/\|/\\\textbar/g, где \| означает чередование.

Смотрите здесь:

echo foo | sed 's/\|/\\bar/'
\barfoo
echo foo | sed 's/|/\\bar/'
foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...