On dirait que vous avez un fichier de configuration. Ce que vous pourriez faire est similaire à ce que suggère Adam Siemeon / slm:
sed -nr 's/[^=]+=\s*(.+)$/\1/p' filename
où [^=]
ne comprend pas tous les « = » caractères, +
indique un ou plusieurs du même type de caractère, ce suivi d'une réelle =
, \s
les espaces blancs (incluant des onglets \t
et de nouvelles lignes \n
, \r\n
et des espaces lisses « », alors que les *
moyens de zéro ou plus du même type , les parenthèses capturent ce qui se trouve à l'intérieur pour placer les séquences de caractères correspondantes dans les espaces réservés de remplacement \ 1, \ 2, ..., \ n, $
signifie la fin d'une ligne. Cela suit le modèle de remplacement typique de:. s/.../.../modifiers
L'option de ligne de commande -r
signifie syntaxe regex étendue (par souci de commodité) et -n
signifie ne rien produire jusqu'à ce que ou sauf demande explicite. Le p
modificateur imprime le résultat.
Vous pouvez faire une recherche globale avec le g
modificateur comme:
sed -nr 's/[^=]+=\s*(.+)$/\1 /pg' filename # note the space after \1
de sorte que vous obtenez une chaîne séparée par ' '
(peut - être \n
, \t
ou qu'avez-vous) que vous pouvez traiter facilement.
Les deux sont valides à condition que vos valeurs précédées de l'équation s'étendent jusqu'à la fin d'une ligne et ne soient pas suivies de commentaires ou d'autres caractères dont la sémantique s'écarte d'une simple "valeur".
Éditer:
Je ne peux pas encore commenter ici les messages des autres. Pour indiquer la ligne, il suffit de passer le numéro de ligne, dans votre cas 3, avant s
ou avant le début du devis (comme dans vim).
sed -nr '3s/[^=]+=\s*(.+)$/\1/p' filename
Veuillez jeter un œil à info sed
. Par exemple, 3.2 et 4.7 vous intéressent particulièrement.
awk
commande est sympa - mais seulement si vous avez des espaces autour du=
. Ça ne marchera pasPOP3_SERVER_NAME=localhost
.