シェル芸で遊んでいた際、行頭と行末以外を置換したいといった事があったので、備忘として残しておく。 置換処理というとまっさきにsedの利用を思いつくのだが、残念ながらsedで行頭・行末の文字以外を指定する方法が思いつかず、Perlの先読み・後読み正規表現を使って置換することにした。
echo あいうえお | perl -C -pe 'use utf8;s/((?<!^).(?!$))/_/g'
blacknon@BS-PUB-UBUNTU-01:~$ echo あいうえお | perl -C -pe 'use utf8;s/((?<!^).(?!$))/_/g'
あ___お
blacknon@BS-PUB-UBUNTU-01:~$
blacknon@BS-PUB-UBUNTU-01:~$ # 指定した行だけに処理をする場合(1行目以外など)
blacknon@BS-PUB-UBUNTU-01:~$ yes あいうえお | head -5 | perl -C -pe 'use utf8;s/((?<!^).(?!$))/_/g if 2..n'
あいうえお
あ___お
あ___お
あ___お
あ___お
blacknon@BS-PUB-UBUNTU-01:~$ yes あいうえお | head -5 | perl -C -pe 'use utf8;s/((?<!^).(?!$))/_/g if 2..3'
あいうえお
あ___お
あ___お
あいうえお
あいうえお