Perlでは、\S
は空白以外の文字と一致します。
バックスラッシュ\
以外の空白以外の文字に一致させるにはどうすればよいですか?
文字クラス を使用できます。
/[^\s\\]/
空白文字でも\
でもないものに一致します。別の例を次に示します。
[abc]
は、「a
、b
、またはc
に一致」を意味します。 [^abc]
は、「a
、b
、またはc
を除く任意の文字に一致」を意味します。
先読みを使用できます。
/(?=\S)[^\\]/
これは私のために働いたsed [Edit:以下のコメントはsedが\ sをサポートしていないことを指摘している]
[^ ]
ながら
[^\s]
しなかった
# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg
echo "ghai ghai" | sed "s/[^ g]//g"
g g
私のシステム:CentOS 5
コレクションの外部で\s
を使用できますが、コレクションの内部で[:space:]
を使用する必要があります。実際、[:space:]
はコレクション内でのみ使用できます。これを使用して単一のスペースを一致させるには、[[:space:]]
を使用する必要がありますが、これは本当に奇妙です。
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
\s
と一致する最初のスペース[[:space:]]
と一致する2番目のスペース[^[:space:]]
これら2つは機能しません。
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b