4

次の 3 つの部分からなるパターンを検出しようとしています。

  1. 空間
  2. 「m」または「t」のいずれか
  3. スペースまたは行末

2号と3号は残しておきたい。たとえば、「彼はしないと確信している」を「彼がしないと確信している」に変更したいと思います。

[ $]行末ではなくスペースのみに一致するように見えるため、#3の表現に問題があります。これが私が試したことです:

$ echo "i m sure he doesn t" | sed 's/ \([mt]\)\([ $]\)/\1\2/g'
im sure he doesn t

上記の表現で「スペースか行末か」をどのように表現すればよいでしょうか?ありがとう!

4

3 に答える 3

4

スペースまたは行末?使用|:

s/ \([mt]\)\( \|$\)/\1\2/g
于 2013-01-02T23:45:31.873 に答える
2

単に一致するスペース、次に m または t、次にスペースまたは改行では、句読点のあるケース (例: の欠落') は検出されません"please don t!"。より一般的な解決策は、代わりに単語境界を使用することです。

echo "i m sure he doesn t test test don t." | sed 's/ \([mt]\)[[:>:]]/\1/g'

ファンキー[[:>:]]はOS X(私が使用しています)で必要です.Larry Gerndtのsed whole word search and replaceへの回答を参照してください。\b他の sed フレーバーでは、 (任意の単語境界) または\>代わりに使用できる場合があります。

# example with word boundary
echo "i m sure he doesn t test test don t." | sed 's/ \([mt]\)[[:>:]]/\1/g'
im sure he doesnt test test dont.
于 2013-01-03T00:03:39.667 に答える
0

最後のスペースをオプションにします:

sed 's/[ ]\([mt][ ]\?\)$/\1/' input

Posix フレンドリー バージョン:

sed 's/[ ]\([mt][ ]\{,1\}\)$/\1/' input
于 2013-01-02T23:48:18.927 に答える