sed:要素を1行に移動

sed:要素を1行に移動

だから私はPerlで次のことをしたいと思います。

if (/number=[0-9]*;/){ print "$&$`$'";}

sedでこれは可能ですか?つまり、線の一部を分けて中央から前方に移動させたいのです。

答え1

sed 's/\(.*\)\(number=[0-9]*;\)/\2\1/'

ただし、複数回発生するとnumber[0-9]*;最後の項目が移動します(なぜなら貪欲 .*)。最初の項目を移動します。

sed -ne 's/number=[0-9]*;/\
&\
/; s/\(.*\)\n\(.*\)\n/\2\1/p'

つまり、を使用する代わりに.*(今回はじめて)パターンが改行文字(パターンスペースに現れない唯一の文字)に発生するため、次のコマンドは一致をs一意に識別できます。

入力が有効なテキストであると仮定します(特に有効な文字を形成しないバイトシーケンスはありません)。

perlたとえば、コマンドラインで使用することもできます。

 perl -pe 'if (/number=[0-9]*;/) {$_ = "$&$`$'"}'

または

 perl -pe 's/(.*?)(number=[0-9])/$2$1/'

答え2

sed -ne 's/number=[0-9]*;/\n&\n/; s/\(.*\)\n\(.*\)\n\(.*\)/\2\1\3/p'

関連情報