だから私は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'