Comment puis-je extraire la première colonne (la première colonne de "")
"xxxxx1" {685a}
"xx2" {bcdd}
"xx3 gsdd" {29a6ff}
"sdsdf xxx" {243b9}
"sdfsdf ccc dd" {c28f2f}
"dsdsf sfsdf" {216e}
"sdfsdfsd" {48530}
"sdfsdff" {9d2afa0n}
"sdfsdfdff sdfs" {d8681a}
"sdfsdsds sdfsdf d" {5b9b8}
"sdfsdfs sdf sdfsdf" {68e08a}
"sdfsdfsdf sdf" {107fa0}
voici ce que je veux avoir comme résultat:
"xxxxx1"
"xx2"
"xx3 gsdd"
"sdsdf xxx"
"sdfsdf ccc dd"
"dsdsf sfsdf"
"sdfsdfsd"
"sdfsdff"
"sdfsdfdff sdfs"
"sdfsdsds sdfsdf d"
"sdfsdfs sdf sdfsdf"
"sdfsdfsdf sdf"
une idée?
Utilisez {
(espace, accolade) comme délimiteur de champ, car le deuxième champ ne vous intéresse pas:
$ awk -F ' {' '{print $1}' foo
"xxxxx1"
"xx2"
"xx3 gsdd"
"sdsdf xxx"
"sdfsdf ccc dd"
"dsdsf sfsdf"
"sdfsdfsd"
"sdfsdff"
"sdfsdfdff sdfs"
"sdfsdsds sdfsdf d"
"sdfsdfs sdf sdfsdf"
"sdfsdfsdf sdf"
Si vous voulez juste tout ce qui se trouve entre le premier et le dernier caractère "
à guillemets doubles de chaque ligne, la solution la plus simple serait probablement la suivante, en utilisant grep
au lieu de awk
:
grep -o '".*"' FILENAME
Le commutateur -o
permet à grep
de ne produire que les parties correspondantes à la place de la ligne entière contenant la correspondance. Le modèle ".*"
(guillemet simple, pour empêcher l'interprétation du shell) correspond à une séquence de n'importe quel caractère (.
) de longueur quelconque (*
), y compris zéro, entourée de guillemets.
Au lieu de la solution muru awk
.
en utilisant cut
:
cut -f 1 -d { < file.txt
en utilisant grep
:
grep -o '".*"' file.txt
ou
grep -o \".*\" file.txt
en utilisant sed
:
sed -r 's/(".*").*/\1/' file.txt
ou
sed -r 's/\{.*\}//' file.txt
ou même:
sed 's/{.*//'
Perl avec le groupement (.*)
peut aussi le faire:
$ Perl -pe 's/"(.*)".*/"\1"/g' input.txt
"xxxxx1"
"xx2"
"xx3 gsdd"
"sdsdf xxx"
"sdfsdf ccc dd"
"dsdsf sfsdf"
"sdfsdfsd"
"sdfsdff"
"sdfsdfdff sdfs"
"sdfsdsds sdfsdf d"
"sdfsdfs sdf sdfsdf"
"sdfsdfsdf sdf"
L'astuce ici est de faire correspondre la ligne entière et d'utiliser "(.*)"
pour traiter tout ce qui se trouve entre les guillemets comme un seul groupe. Nous remplaçons toute cette ligne par le groupe que nous avons mis en correspondance en y faisant référence via \1
.