sed 모든 줄을 파일의 마지막 줄에 정렬합니다. Bash 스크립트


0

아래 줄에 파일이 있습니다.

Dev_Campaign_1873.rpm
Dev_Campaign_1987.rpm
Dev_Campaign_9876.rpm
http://52.30.241.107:8081/artifactory/api/storage/adifact

sed 또는 다른 명령을 사용하여 아래와 같이 파일에 출력을 얻으려고합니다.

http://52.30.241.107:8081/artifactory/api/storage/adifact/Dev_Campaign_1873.rpm
http://52.30.241.107:8081/artifactory/api/storage/adifact/Dev_Campaign_1987.rpm
http://52.30.241.107:8081/artifactory/api/storage/adifact/Dev_Campaign_9876.rpm

답변:


0

이 sed 스크립트를 사용해보십시오 : 그것은 매우 hackish하고 두 가지에 의존합니다 : 텍스트는 '|'기호를 포함하지 않습니다. 마지막 줄은 'http :'로 시작합니다.

:again
${
s/\n/|/g
# to include first part too
s/^/|/
:next
# modify last non processed part
s/\(.*\)|\([^|]\+\)|\(.*\)\(http:.*\)/\1|\4\/\2\n\3\4/
t next
# remove unneeded guard
s/^|//
# remove prefix
s/\(.*\n\)\([^\n]\+\)/\1/
b end
}
N
b again
:end

어떻게 작동합니까?

우리가 다음과 같은 내용을 가지고 있다고 가정 해보십시오.

aaa
bbb
http://zzz

먼저, 스크립트는 파일의 모든 라인을 내부 버퍼에 결합합니다.

:again
${
    # Here internal buffer will be processed
    b end
}
N
b again
:end

내 스크립트에서 sed가 줄 단위로 텍스트를 처리 할 수 ​​없을 때 매우 일반적인 패턴입니다. 그리고 입력은별로 크지 않습니다. 첫 줄 스크립트에서 시작하는 것은 인터럽트하지 않고 끝까지 버퍼에 다음 행 ( 'N')을 읽으십시오.

마지막 행 ( '$')을 얻으면 더 처리 할 수 ​​있습니다. 그리고 그것이 끝나면 중지 ( 'b 끝'). 하나는 끝까지 도달하기 위해 difinite 레이블을 사용할 수 없으며, 단지 'b'가됩니다. 너무 일하지만 선명도가 더 좋습니다.

이제 내부 버퍼에 다음 텍스트가 있습니다.

aaa\nbbb\nhttp://zzz

다음으로 '|'기호로 라인을 구분합니다. '\ n'대신 :

s/\n/|/g
# to include first part too
s/^/|/

|aaa|bbb|http://zzz

그런 다음이 패턴을 찾습니다.

...|text|.....http://...

그것을 다음과 같이 변경하십시오

...|http://...text\n.....http://...

사용 된 정규 표현식의 greeding 특성으로 인해 대치는 끝에서부터 끝까지 발생합니다. 하나의 기호 '|'를 제거하는 각 단계에서 문자열의 시작 :

Initial state of buffer:
|aaa|bbb|http://zzz

After first step:
|aaa|http://zzz/bbb\nhttp://zzz

After second step:
|http://zzz/aaa\nhttp://zzz/bbb\nhttp://zzz

루프는 명령 't 다음'의 도움으로 구성되었습니다. 레이블 '다음'으로 이동합니다. 마지막 대체가 성공한 경우.

다음으로 불필요한 가드 '|'를 제거합니다. 줄의 시작 부분에 :

s/^|//

http://zzz/aaa\nhttp://zzz/bbb\nhttp://zzz

그리고 마지막 줄 :

s/\(.*\n\)\([^\n]\+\)/\1/

http://zzz/aaa\nhttp://zzz/bbb

그래서, 마침내 버퍼를 인쇄하면 다음과 같이 나타납니다 :

http://zzz/aaa
http://zzz/bbb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.