sedを使用して、文字「a」を「A」に変更する方法。ただし、2つ以上の連続した文字として繰り返されているように見える場合に限ります。例、from:
galaxy
ear
aardvak
Haaaaaaaaa
の中へ
galaxy
ear
AArdvak
HAAAAAAAAA
あなたはグループを使ってそれをすることができます。このファイルがある場合:
$ cat a
galaxy
ear
aardvak
Haaaaaaaaa
Ulaanbaatar
このsedコマンドを使用できます。
$ sed 's/\(.\)\1\{1,\}/\U&/g' a
galaxy
ear
AArdvak
HAAAAAAAAA
UlAAnbAAtar
ここで何が起こりますか?グループ()に「パック」された文字があり\(.\)
、このグループ(\1
)が1回以上繰り返される場合(\1\{1,\}
)、一致した部分(&
)を大文字のバージョン(\U&
)に置き換えます。
編集
あなたはこれを行うことができます:
sed 's/a\(a\+\)/A\U\1/;s/b\(b\+\)/B\U\1/;s/c\(c\+\)/C\U\1/;s/d\(d\+\)/D\U\1/;s/e\(e\+\)/E\U\1/;s/f\(f\+\)/F\U\1/;s/g\(g\+\)/G\U\1/;s/h\(h\+\)/H\U\1/;s/i\(i\+\)/I\U\1/;s/j\(j\+\)/J\U\1/;s/k\(k\+\)/K\U\1/;s/l\(l\+\)/L\U\1/;s/m\(m\+\)/M\U\1/;s/n\(n\+\)/N\U\1/;s/o\(o\+\)/O\U\1/;s/p\(p\+\)/P\U\1/;s/q\(q\+\)/Q\U\1/;s/r\(r\+\)/R\U\1/;s/s\(s\+\)/S\U\1/;s/t\(t\+\)/T\U\1/;s/u\(u\+\)/U\U\1/;s/v\(v\+\)/V\U\1/;s/w\(w\+\)/W\U\1/;s/x\(x\+\)/X\U\1/;s/y\(y\+\)/Y\U\1/;s/z\(z\+\)/Z\U\1/'
(避難所のおかげで)
またはsedのパイプで:
function capitalize_consecutives () {
sed 's/a\(a\+\)/A\U\1/' |
sed 's/b\(b\+\)/B\U\1/' |
sed 's/c\(c\+\)/C\U\1/' |
sed 's/d\(d\+\)/D\U\1/' |
sed 's/e\(e\+\)/E\U\1/' |
sed 's/f\(f\+\)/F\U\1/' |
sed 's/g\(g\+\)/G\U\1/' |
sed 's/h\(h\+\)/H\U\1/' |
sed 's/i\(i\+\)/I\U\1/' |
sed 's/j\(j\+\)/J\U\1/' |
sed 's/k\(k\+\)/K\U\1/' |
sed 's/l\(l\+\)/L\U\1/' |
sed 's/m\(m\+\)/M\U\1/' |
sed 's/n\(n\+\)/N\U\1/' |
sed 's/o\(o\+\)/O\U\1/' |
sed 's/p\(p\+\)/P\U\1/' |
sed 's/q\(q\+\)/Q\U\1/' |
sed 's/r\(r\+\)/R\U\1/' |
sed 's/s\(s\+\)/S\U\1/' |
sed 's/t\(t\+\)/T\U\1/' |
sed 's/u\(u\+\)/U\U\1/' |
sed 's/v\(v\+\)/V\U\1/' |
sed 's/w\(w\+\)/W\U\1/' |
sed 's/x\(x\+\)/X\U\1/' |
sed 's/y\(y\+\)/Y\U\1/' |
sed 's/z\(z\+\)/Z\U\1/'
}
次に、ファイルを解析します。
capitalize_consecutives < myfile
\U
発生を大文字にすることです。これはGNUSed専用だと思います。