2012-08-16 10 views
7

Mam dokument zawierający wiele procent, plus i znaki rur. Chcę zastąpić je kodem, do wykorzystania w TeX.Jak znaleźć i wymienić wszystkie znaki procentu, plusa i rury?

  • % zostaje \textpercent.
  • + zostaje \textplus.
  • | zostaje \textbar.

Jest to kod używam, ale to nie działa:

sed -i "s/\%/\\\textpercent /g" ./file.txt 
sed -i "s/|/\\\textbar /g" ./file.txt 
sed -i "s/\+/\\\textplus /g" ./file.txt 

Jak mogę zastąpić te symbole z tym kodem?

+0

Komenda, o której wspomniałeś, działa u mnie. – Vijay

+0

Możesz połączyć wszystkie trzy w jednym skrypcie sed i stracić bezużyteczne ukośniki. 'sed -i -e 's /%/\ textpercent/g; s/+/\\ textplus/g; s/|/\\ textbar/g' plik.txt' – tripleee

+0

Aby" pomyślnie zastąpić każdy procent plus i znak potoku z moich plików "będziesz musiał dostarczyć nam swoje pliki. –

Odpowiedz

10

Test:

#!/bin/bash 

cat << 'EOF' > testfile.txt 
1+2+3=6 
12 is 50% of 24 
The pipe character '|' looks like a vertical line. 
EOF 

sed -i -r 's/%/\\textpercent /g;s/[+]/\\textplus /g;s/[|]/\\textbar /g' testfile.txt 

cat testfile.txt 

wyjściowa:

1\textplus 2\textplus 3=6 
12 is 50\textpercent of 24 
The pipe character '\textbar ' looks like a vertical line. 

To było już sugerowane w podobny sposób przez @tripleee, i nie widzę powodu, dlaczego nie powinno działać. Jak widzisz, moja platforma używa tej samej wersji GNU sed co twoja. Jedyną różnicą do wersji @ tripleee jest to, że używam rozszerzonego trybu regex, więc muszę albo uciec z rury i plusa, albo umieścić go w klasie znaków z [].

2

apostrofów:

$ cat in.txt 
foo % bar 
foo + bar 
foo | bar 
$ sed -e 's/%/\\textpercent /g' -e 's/\+/\\textplus /g' -e 's/|/\\textbar /g' < in.txt 
foo \textpercent bar 
foo \textplus bar 
foo \textbar bar 
+0

... i może użyć innego separatora niż '/' dla czytelności. Mogę zasugerować '#' –

+1

Nie widzę potrzeby używania innego separatora, ponieważ '/' jest * tylko * używane tutaj jako ogranicznik. –

3
nawk '{sub(/%/,"\\textpercent");sub(/\+/,"\\textplus");sub(/\|/,"\\textpipe"); print}' file 

Testowany poniżej: skrypt

> echo "% + |" | nawk '{sub(/%/,"\\textpercent");sub(/\+/,"\\textplus");sub(/\|/,"\\textpipe"); print}' 
\textpercent \textplus \textpipe 
+0

Czy istnieje sposób, aby wprowadzić te zmiany do tego samego pliku, bez konieczności wysyłania wyników do nowego pliku? – Village

+0

Nice! nawk i gawk są bardzo mocni! Wysoce zalecane, po przejrzeniu ich stron man i trochę dokumentacji online. (Zobacz także: polecenie gsub w nawk/gawk, które zastępuje wszystkie wystąpienia, nie tylko pierwsze.) – Andrew

+0

@Village Możesz przekierować wyjście do pliku, umieszczając po prostu '> filePath' na końcu (gdzie filePath jest np.'/home/username/myfile'). – Andrew

Powiązane problemy