このスクリプトは、行内の文字の並びを逆にするために使えます。1度に2文字を移動する手法なので、より直感的な実装よりも高速です。
ラベル定義の前にあるtxコマンドに注目してください。tコマンドが検査するフラグをリセットするため、この処理が必要になることがよくあります。
想像力のある読者なら、このスクリプトの用途を思いつくでしょう。たとえば、bannerの出力を逆にする用途があります。10
#!/usr/bin/sed -f /../! b
# Reverse a line. Begin embedding the line between two newlines s/^.*$/\ &\ /
行を逆順にします。まず、行を2つの改行で挟みます。
# Move first character at the end. The regexp matches until # there are zero or one characters between the markers tx :x s/\(\n.\)\(.*\)\(.\n\)/\3\2\1/ tx
先頭の文字を末尾へ移動します。この正規表現は、目印の間の文字が0文字または1文字になるまでマッチします。
# Remove the newline markers s/\n//g
目印に使った改行を取り除きます。
これには、bannerの出力を空白で埋める別のスクリプトが必要です。たとえば、次のようにします。
#! /bin/sh
banner -w $1 $2 $3 $4 |
sed -e :a -e '/^.\{0,'$1'\}$/ { s/$/ /; ba; }' |
~/sedscripts/reverseline.sed