
そこで私は次のような声明を出しました。
echo "1234 The few, 7777 the brave." | sed 's/[0-9]\{4\}/(&)/g'
出力
(1234) The few, (7777) the brave.
ただし、パターンマッチングから 7777 を除外したいと思います。
(1234) The few, 7777 the brave.
質問: 7777 パターン マッチングを除外するにはどうすればよいですか?
答え1
sed には、7777 をうまくスキップできる先読み式はありません。ただし、7777 の一致をすべて、入力のどこにも出現しないと確信できる文字列に「移動」することで、不器用な方法でそれを行うことができます。
たとえば、入力に #7#7#7#7# が出現しないことが分かっている場合は、次のように使用できます。
echo "1234 The few, 7777 the brave." | \
sed -e 's/7777/#7#7#7#7#/g' -e 's/[0-9]\{4\}/(&)/g' -e 's/#7#7#7#7#/7777/g'
取得するため
(1234) The few, 7777 the brave.
答え2
あるいは:
echo "1234 The few, 7777 the brave." | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
(1234) The few, 7777 the brave.
echo "A 1717 B 7777 C 7676 D" | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
A (1717) B 7777 C (7676) D
echo "7777 foo 1234 bar" | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
7777 foo (1234) bar