2012-08-16 15 views
7

Tengo un documento que contiene muchos signos de porcentaje, más y de tubería. Quiero reemplazarlos con un código, para usar en TeX.¿Cómo encontrar y reemplazar todos los signos de porcentaje, más y de tubería?

  • % se convierte en \textpercent.
  • + convierte \textplus.
  • | convierte \textbar.

Este es el código que estoy utilizando, pero no funciona:

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

¿Cómo puedo reemplazar estos símbolos con este código?

+0

el comando que mencionaste funciona en mi casa. – Vijay

+0

Puede combinar los tres en un único script sed y perder las barras invertidas gratuitas. 'Sed -i -e 's /%/\\ textpercent/g; s/+/\\ TextPlus/g; s/|/\\ barra del texto/g' file.txt' – tripleee

+0

"reemplazar con éxito cada ciento, más , y señal de tubería de mis archivos "deberá proporcionarnos sus archivos. –

Respuesta

10

prueba:

#!/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 

Salida:

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

Esto ya se sugirió en una forma similar por @tripleee, y no veo ninguna razón para que no debería funcionar. Como puede ver, mi plataforma usa la misma versión de GNU sed que la suya. La única diferencia con la versión de @ tripleee es que utilizo el modo regex extendido, así que tengo que escapar del conducto y el más o ponerlo en una clase de caracteres con [].

2

Use comillas simples:

$ 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

... y quizás use otro delimitador que '/', para facilitar la lectura. Puedo sugerir un '#' –

+1

No veo la necesidad de usar otro delimitador ya que '/' es * solo * usado como un delimitador aquí. –

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

Probado a continuación: guión

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

¿Hay alguna manera de hacer que estos cambios ocurran en el mismo archivo, sin tener que enviar los resultados a un nuevo archivo? – Village

+0

¡Agradable! nawk y gawk son bastante poderosos! Muy recomendable, después de haber hojeado sus páginas man y un poco de los documentos en línea. (Ver también:. Gsub comando en nawk/gawk, que reemplaza todas las ocurrencias, no sólo la primera) – Andrew

+0

@Village Puede redirigir la salida a un archivo con sólo poner '> filePath' al final (donde rutaArchivo es, por ejemplo'/inicio/nombre de usuario/miarchivo'). – Andrew

Cuestiones relacionadas