2012-09-21 30 views
10

¿Cómo puedo reemplazar una cadena pero solo en la primera línea del archivo usando el programa "sed"?sed reemplazar cadena en una primera línea

Los comandos s/test/blah/1 y 1s/test/blah/ no parecen funcionar. ¿Hay otra manera?

+1

¿qué pasa con '1s/test/bla /' "no funciona"? –

Respuesta

2

Esto lo hará:

sed -i '1s/^.*$/Newline/' textfile.txt 

De no ser así sólo asegúrese de que el partido es único a la línea uno solamente:

sed -i 's/this is line one and its unique/Changed line one to this string/' filename.txt 

La opción -i escribe el cambio en el archivo en lugar de simplemente mostrar la salida a stdout.

EDIT:

Para reemplazar toda la línea, haciendo coincidir la cadena común sería:

sed -i 's/^.*COMMONSTRING$/Newline/' 

Dónde ^ coincide con el inicio de la línea, $ coincide con el final de la línea y .* partidos todo hasta COMMONSTRING

+0

la línea es diferente cada vez con una cadena común al final, pero me diste una idea de cómo resolver esto, ¡gracias! ;) – irek

20

Esto podría funcionar para usted (sed de GNU):

sed -i '1!b;s/test/blah/' file 

solo sustituirá la primera test por blah en la primera línea solamente.

O si lo que desea es cambio la primera línea:

sed -i '1c\replacement' file 
+0

Respuesta de Oldschool. Me gusta. ¡Voto! – lzap

+1

Por cierto, también funciona sin "! B;" - ¿Para qué sirve? – lzap

+4

@lzap "1! B" = if 'not' on line' 1' then 'b'ranch al final del script –

Cuestiones relacionadas