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 []
Ich möchte die erste Spalte der obigen Spalte erhalten, aber der Haken ist, dass ich \
(Backslash Space) als Teil der Spalte behandeln muss, also awk '{print $1}'
sollte ich geben
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
quelle
quelle
\
Besonderes? Ist zum Beispiela\\ b
ein Feld oder zwei?[[:space:]]
durch ersetzt habe\[[:space:]]
, sind die Originaldaten an ihrer Stelle unberührt geblieben. Nachdem sie die Originaldaten in der ersten Spalte nur Leerzeichen getrennt und nicht\[[:space:]]
, würde ich ersetzen\[[:space:]]
mit[[:space:]]
und ich würde wieder mit Originaldaten bleiben die hat \.Antworten:
Mit gnu awk (
gawk
) können Sie einige Aussagen mit der Länge Null verwenden, wie\<
oder\>
:aber leider nicht die ausgewachsen diejenigen aus
perl
oderpcre
(zB.(?<!\\)
,(?<=\w)
usw.):quelle
Sie könnten \ space durch etwas anderes ersetzen und danach wieder zurückkehren.
quelle
\034
:awk '{gsub(/\\ /,SUBSEP,$0); val=$1; gsub(SUBSEP,"\\ ",val); print val}' file
Mit GNU
grep
oder kompatibel:Oder mit ERE:
Das wird
\
als Anführungszeichen behandelt , für Leerzeichen als Trennzeichen, aber auch für sich. Das heißt, bei derfoo\\ bar
Eingabe wird zurückgegebenfoo\\
.quelle
Mit nur
sed
:Oder kürzer:
Dies
(([^\]*\\ ){1,})?[^ ]*
passt zu:[^\]*\\
: Alles, was kein Schrägstrich ist, der mit einem Schrägstrich gefolgt von einem Leerzeichen endet (beachten Sie, dass die\
innere Zeichenklasse nicht maskiert werden muss, sondern die äußere).([^\]*\\ ){1,}
: oben mit einem oder mehreren Vorkommen übereinstimmen.(([^\]*\\ ){1,})?
: Dies ist optional bei Verwendung(...)?
; wir könnten([^\]*\\ ){0,}
stattdessen auch oder verwenden([^\]*\\ )*
.((([^\]*\\ ){1,})?[^ ]*)
: Übereinstimmungen darüber, die optional sind, gefolgt von allem, was kein Leerzeichen ist, und als Gruppenübereinstimmung mit\1
als Hintergrundreferenz.((([^\]*\\ ){1,})?[^ ]*).*
: passt oben(...)
und alles andere.*
.Dann wird das Ersatzteil einfach gedruckt,
\1
welches die Ausgabe ist:quelle