sed - パターンを見つけて置き換えますが、特定の数値シーケンスは除外します。

sed - パターンを見つけて置き換えますが、特定の数値シーケンスは除外します。

だから私は次のような宣言をします。

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.

Q: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

関連情報