¿Cómo ordenar para que caml esté después de c en un xml?

0

Ordenar un archivo con líneas

<LexerType name="caml" desc="Caml" ext="">
<LexerType name="c" desc="C" ext="">

hace que caml esté delante de c, ¿cómo pongo a c primero en general, sin confiar en las posiciones de caracteres de este archivo?

nnn
fuente
1
¿Qué programa está utilizando para ordenar las líneas y cómo lo invoca? Solo haciendo una comparación de bytes debe obtener los resultados que desea.
jwodder
Estoy usando sort (GNU coreutils) 8.5.
nnn
Para mi, solo corriendo sort en esas dos líneas se imprime la línea "c" antes de la línea "caml", por lo que debe estar ocurriendo algo más. ¿La línea "caml" contiene espacios en blanco iniciales adicionales en su archivo?
jwodder
Sí, ambas líneas contienen la misma cantidad de espacios iniciales.
nnn
1
Intenta agregar LC_ALL = C antes de ordenar la invocación, por ejemplo, "LC_ALL = C sort ...", tal vez sea un problema de configuración regional, por lo que está obteniendo un orden de clasificación extraño.
haimg

Respuestas:

0

utilizando sort

$ sort -t\" -k2,2 file.xml
<LexerType name="c" desc="C" ext=""/>
<LexerType name="caml" desc="Caml" ext=""/>

   -k, --key=POS1[,POS2]
          start a key at POS1, end it at POS2 (origin 1)
   -t, --field-separator=SEP
          use SEP instead of non-blank to blank transition

utilizando vim

:%sort /name=/

o

:%sort r /name="\w*"/

:[range]sor[t][!] [i][u][r][n][x][o] [/{pattern}/]

                    When /{pattern}/ is specified and there is no [r] flag
                    the text matched with {pattern} is skipped, so that
                    you sort on what comes after the match.
                    Instead of the slash any non-letter can be used.
                    For example, to sort on the second comma-separated
                    field: >
                            :sort /[^,]*,/
                    To sort on the text at virtual column 10 (thus
                    ignoring the difference between tabs and spaces): >
                            :sort /.*\%10v/
                    To sort on the first number in the line, no matter
                    what is in front of it: >
                            :sort /.*\ze\d/

                    With [r] sorting is done on the matching {pattern}
                    instead of skipping past it as described above.
                    For example, to sort on only the first three letters
                    of each line: >
                            :sort /\a\a\a/ r
kev
fuente