2012-03-31 25 views
0

根據https://tex.stackexchange.com/questions/48933/which-symbols-need-to-be-escaped-in-context的信息,我想準備一個供ConTeXt使用的文件。我需要做幾個替換:爲什麼我的文件在運行sed後充滿了extbar?

  • 替換#\#
  • %替換爲\percent
  • \textbar代替|
  • $替換爲\textdollar
  • \textunderscore代替_
  • ~替換爲\textasciitilde
  • {替換爲\textbraceleft
  • \textbraceright代替}

我一直在使用從Replacing "#", "$", "%", "&", and "_" with "\#", "\$", "\%", "\&", and "\_"信息做這些替代品的嘗試:

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」出現在我的文件中?

回答

1

當你做

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

這可能會爲你工作:

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 
1

使用四個反斜槓,而不是逃避。他們被評估兩次。之後,你有性格\t作爲替代品,其次是字符串'extbar'(從\ textbar)

相關問題