Jawaban:
Anda dapat menggunakan kelas karakter :
/[^\s\\]/
cocok dengan apa pun yang bukan karakter spasi atau \
. Berikut contoh lainnya:
[abc]
berarti "cocok a
, b
atau c
"; [^abc]
berarti "mencocokkan karakter apa pun kecuali a
, b
atau c
".
$0~/\s*^\s/
diikuti oleh karakter yang bukan spasi putih
/^\s+/
- awal baris, diikuti oleh satu atau lebih karakter spasi.
g
pengubah. /[^\s\\]/g
Anda bisa menggunakan lookahead:
/(?=\S)[^\\]/
/(?=\S)\W/
THIS IS A TEST, AND AGAIN
. Berikut ini bekerja dengan baik untuk saya (?=\S)[^"]*
.
Ini bekerja untuk saya menggunakan sed [ Sunting: komentar di bawah menunjukkan sed tidak mendukung \ s]
[^ ]
sementara
[^\s]
tidak
# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg
echo "ghai ghai" | sed "s/[^ g]//g"
g g
\s
cocok lebih dari sekedar karakter spasi. Ini termasuk TAB, linefeed carriage return, dan lainnya (berapa banyak lainnya bergantung pada rasa regex). Ini adalah penemuan Perl, awalnya singkatan dari kelas karakter POSIX [:space:]
, dan tidak didukung di sed
. Regex pertama Anda di atas seharusnya s/[^[:space:]g]//g
.
echo "ghai ghai" | sed "s/[^[:space:]g]//g"
Hasil:g g
Di sistem saya: CentOS 5
Saya dapat menggunakan di \s
luar koleksi tetapi harus menggunakan [:space:]
di dalam koleksi. Sebenarnya saya [:space:]
hanya bisa menggunakan koleksi di dalam. Jadi untuk mencocokkan satu spasi menggunakan ini saya harus menggunakan [[:space:]]
Yang benar-benar aneh.
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
\s
[[:space:]]
[^[:space:]]
Keduanya tidak akan berhasil:
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b
([^[:space:]])
bukan ([^\s])
. Saya menggunakan openSUSE Tumbleweed 2018 04 03.
^
diartikan sebagai negasi dan kapan sebagai baris awal? Dalam hal ini, mengapa ini tidak cocok dengan garis yang dimulai dengan jumlah spasi$0~/\s*^\s/