Tengo un archivo de texto que tiene valores separados por comas. El campo 1 tiene un campo que debe coincidir, pero el campo dos necesita una sustitución basada en la coincidencia.
Ejemplo:
A, C
B, C
Resultado:
A, D
B, C
Supongo que el comando se vería más o menos así:
sed 's/A/D/'
Gracias
linux
sed
bash-scripting
sgp667
fuente
fuente
Respuestas:
Qué tal esto
Si la primera columna es A, y luego hay una coma, y hay algo en la segunda columna, reemplaza el lote con A, D. Esto solo sucederá cuando coincida con A en la primera columna (seguido de una coma y lo que sea en la segunda columna).
Un ejemplo con un archivo
Esto convierte tu ejemplo en tu resultado. Entonces, donde su primera columna es A, su segunda columna se convierte en D.
fuente
Use una expresión de dirección para seleccionar las líneas que desea editar, luego use un reemplazo regular para hacer el reemplazo. Una cosa divertida de sed es que, antes del comando "s", puede especificar un número de línea o una expresión regular para elegir las líneas que le interesan (la dirección también puede ser un inicio y un final separados por comas que especifiquen todas las líneas contenida dentro del "rango de direcciones", pero dejando la segunda parte seleccionada selecciona líneas individuales).
En su expresión de dirección, busque "no una coma, seguida de lo que desea".
En el reemplazo, recuerde las cosas antes de su patrón, luego coloque las partes "antes" antes de su cadena de reemplazo. Recuerdas la parte de "antes" porque quieres que las cosas de antes solo incluyan una coma, ni más ni menos. Aquí muestra que coincide con el primer campo y solo impacta el segundo; Estoy reemplazando "la" con "moo" en la segunda columna de líneas que coinciden con "atter" en la primera columna.
Esto por sí solo no funcionará correctamente con comas escapadas en los campos, por lo que esperamos que su archivo CSV sea simple. :)
fuente
sed '/barlow'
y mira el mensaje de error; dice "address regexp", que es la abreviatura de "address regular expression".sed -n '1,1'p behaves the same as
sed -n '1p' '), por lo que parece razonable considerar el caso singleton como abreviatura sintáctica para un rango donde los puntos de inicio y finalización son idénticos. Así es como lo implementa match_address_p en la fuente.