tagger tag picard para musicbrainz mac kid3 for easytag linux sed

linux - tag - musicbrainz picard debian



¿Cuál es la forma correcta de insertar la pestaña en sed? (7)

Asumiendo bash (y tal vez otros shells funcionen también):

some_command | sed $''1itext/ttext''

Bash procesará escapes, como /t , dentro de $'' '' antes de pasarlo como un argumento a sed.

¿Cuál es la forma correcta de insertar la pestaña en sed? Estoy insertando una línea de cabecera en una secuencia usando sed. Probablemente podría reemplazar un personaje luego para ponerlo en la pestaña usando expresiones regulares, pero ¿hay una mejor manera de hacerlo?

Por ejemplo, digamos que tengo:

some_command | sed ''1itextTABtext''

Me gustaría que la primera línea se vea así (el texto está separado por un carácter de tabulación):

text text

He intentado sustituir TAB en el comando anterior con "/ t", "/ x09", "" (pestaña en sí). Lo he intentado con y sin comillas dobles y no puedo conseguir que inserte una pestaña entre el texto.

Estoy tratando de hacer esto en SLES 9.


Como la mayoría de las respuestas dicen, probablemente la tab literal es la mejor.

info sed dice " / t no es portátil ".

... ''/CHAR'' Matches CHAR, where CHAR is one of ''$'', ''*'', ''.'', ''['', ''/', or ''^''. Note that the only C-like backslash sequences that you can portably assume to be interpreted are ''/n'' and ''/'; in particular ''/t'' is not portable, and matches a ''t'' under most implementations of ''sed'', rather than a tab character. ...


Encontré una forma alternativa de insertar una pestaña utilizando la sustitución.

some_command | sed ''1s/^/text/ttext/n/''

Todavía no conozco una forma de hacerlo usando el método de inserción.


Para ilustrar el hecho de que la sintaxis de BRE para sed menciona que no es portátil, Git 2.13 (Q2 2017) se deshace de él.

Ver commit fba275d (01 de abril de 2017) por Junio ​​C Hamano ( gitster ) .
(Fusionada por Junio ​​C Hamano - gitster - in commit 3c833ca , 17 de abril de 2017)

contrib/git-resurrect.sh : no escriba /t para HT en scripts sed

Al igual que hicimos en 0d1d6e5 (" t/t7003 : reemplace /t con tabulador literal en expresión sed ", 2010-08-12, Git 1.7.2.2), evite escribir " /t " para HT en scripts sed , lo cual no es portátil.

- sed -ne ''s~^/([^ ]*/) .*/tcheckout: moving from ''"$1"'' .*~/1~p'' + sed -ne ''s~^/([^ ]*/) .* checkout: moving from ''"$1"'' .*~/1~p'' ^^^^ | (literal tab)


Sed puede hacer esto, pero es incómodo:

% printf "1/t2/n3/t4/n" | sed ''1i// foo bar// '' foo bar 1 2 3 4 $

(Las barras invertidas dobles se deben a que estoy usando tcsh como mi shell; si usas bash, usas barras invertidas simples)

El espacio entre foo y bar es una pestaña, la cual escribí antes de añadirla con Ctrl V. También deberá anteponer las nuevas líneas dentro de sus comillas simples con un Ctrl V.

Probablemente sería más simple / claro hacer esto con awk:

$ printf "1/t2/n3/t4/n" | awk ''BEGIN{printf("foo/tbar/n");} {print;}''


Simplemente puede usar el comando sed i correctamente:

some_command | sed ''1i/ text text2''

donde, como espero que sea obvio, hay una pestaña entre ''texto'' y ''texto2''. En MacOS X (10.7.2) y, por lo tanto, probablemente en otras plataformas basadas en BSD, pude usar:

some_command | sed ''1i/ text/ttext2''

y sed tradujo el /t en una pestaña.

Si sed no interpretará /t e insertar pestañas en la línea de comandos es un problema, cree un script de shell con un editor y ejecute ese script.


escapar de la pestaña de caracteres:

sed -i ''/<setup>/ a //tmy newly added line'' <file_name>

NOTA: arriba tenemos dos barras invertidas (/) la primera es para escapar () y la siguiente es la pestaña real char (/ t)