그래서 저는 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'