5678 []
testing,\ group []
[testing []
ip\ 5.6.7.8 []
launch-wizard-1 0.0.0.0/0
456dlkjfa []
1.2.3.4 []
test 1.2.3.4/32 4.3.2.0/23 4.3.2.0/23
default 4.3.2.0/23 4.3.2.0/23
launch-wizard-2 0.0.0.0/0
launch-wizard-3 0.0.0.0/0
2.3.4.5/32 []
Je voudrais obtenir la première colonne de ce qui précède, mais le hic, c'est que je dois traiter \
(espace barre oblique inverse) comme une partie de la colonne, donc awk '{print $1}'
devrait me donner
5678
testing,\ group
[testing
ip\ 5.6.7.8
launch-wizard-1
456dlkjfa
1.2.3.4
test
default
launch-wizard-2
launch-wizard-3
2.3.4.5/32
text-processing
awk
sed
GypsyCosmonaut
la source
la source
\
spécial? Par exemple, y a-t-ila\\ b
un champ ou deux?[[:space:]]
par\[[:space:]]
, les données d'origine n'ont pas été modifiées à leur place. Après avoir obtenu les données d'origine dans la première colonne délimitées uniquement par des espaces et non\[[:space:]]
, je remplacerais\[[:space:]]
par[[:space:]]
et je me retrouverais avec les données d'origine qui contiennent \.Réponses:
avec gnu awk (
gawk
), vous pouvez utiliser des assertions de longueur nulle comme\<
ou\>
:mais malheureusement pas les épanouies de
perl
oupcre
(par exemple.(?<!\\)
,(?<=\w)
, etc.):la source
Vous pouvez remplacer \ espace par quelque chose d'autre et revenir ensuite.
la source
\034
:awk '{gsub(/\\ /,SUBSEP,$0); val=$1; gsub(SUBSEP,"\\ ",val); print val}' file
Avec GNU
grep
ou compatible:Ou avec ERE:
Cela traite
\
comme un opérateur de citation, pour les espaces comme un délimiteur, mais aussi pour lui-même. Autrement dit, enfoo\\ bar
entrée, il revientfoo\\
.la source
Avec juste
sed
:Ou plus court:
Cela
(([^\]*\\ ){1,})?[^ ]*
correspond:[^\]*\\
: tout ce qui n'est pas une barre oblique inverse qui se termine par une barre oblique inverse suivie d'un espace (notez que l'\
intérieur de la classe de caractère n'a pas besoin d'être échappé, mais l'extérieur le fait).([^\]*\\ ){1,}
: correspondance ci-dessus avec une ou plusieurs périodes d'occurrences.(([^\]*\\ ){1,})?
: ceci est facultatif lors de l'utilisation(...)?
; nous pourrions également utiliser à la([^\]*\\ ){0,}
place ou([^\]*\\ )*
.((([^\]*\\ ){1,})?[^ ]*)
: correspond au-dessus de ce qui est facultatif suivi de tout ce qui n'est pas un espace et conservez comme correspondance de groupe avec\1
comme référence arrière.((([^\]*\\ ){1,})?[^ ]*).*
: correspond ci(...)
- dessus et toute autre chose.*
.alors la pièce de rechange suffit d'imprimer ce
\1
qui est la sortie:la source