
所以我發表以下聲明:
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 的先行表達式。一點。
例如,如果您知道輸入中未出現 #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