sed: 요소를 한 줄로 이동

sed: 요소를 한 줄로 이동

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

관련 정보