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
, b
o c
"; [^abc]
significa "trova qualsiasi carattere tranne a
, b
o 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.
g
modificatore. /[^\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
\s
corrisponde 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 \s
al 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/