Risposte:
Puoi usare una classe di caratteri :
/[^\s\\]/
corrisponde a tutto ciò che non è un carattere di spazio bianco né un \. Ecco un altro esempio:
[abc]significa "corrispondenza a, bo c"; [^abc]significa "trova qualsiasi carattere tranne a, bo c".
$0~/\s*^\s/seguita da qualsiasi carattere che non sia uno spazio bianco
/^\s+/- inizio della riga, seguito da uno o più caratteri di spazio bianco.
gmodificatore. /[^\s\\]/g
Puoi usare un lookahead:
/(?=\S)[^\\]/
/(?=\S)\W/
THIS IS A TEST, AND AGAIN. Quanto segue ha funzionato bene per me (?=\S)[^"]*.
Questo ha funzionato per me usando sed [ Modifica: il commento sotto indica che sed non supporta \ s]
[^ ]
mentre
[^\s]
non l'ha fatto
# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg
echo "ghai ghai" | sed "s/[^ g]//g"
g g
\scorrisponde a più del semplice carattere spazio. Esso comprende TAB, ritorno a capo avanzamento riga, e altri (come molti altri dipende dal sapore regex). È un'invenzione di Perl, originariamente una scorciatoia per la classe di caratteri POSIX [:space:], e non supportata in sed. La tua prima espressione regolare sopra dovrebbe essere s/[^[:space:]g]//g.
echo "ghai ghai" | sed "s/[^[:space:]g]//g" Rendimenti:g g
Sul mio sistema: CentOS 5
Posso usare \sal di fuori delle raccolte ma devo usare [:space:]all'interno delle raccolte. Infatti posso usare [:space:]solo all'interno delle collezioni. Quindi per abbinare un singolo spazio usando questo devo usare il [[:space:]]
che è davvero strano.
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
\s[[:space:]][^[:space:]]Questi due non funzioneranno:
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b
([^[:space:]])invece di ([^\s]). Sono su openSUSE Tumbleweed 2018 04 03.
^interpretato come negazione e quando come inizio riga? A questo proposito, perché questo non corrisponderà a una linea che inizia con il numero di spazi bianchi$0~/\s*^\s/