한 가지 방법은 다음과 같습니다.
$ perl -lne 's/^/\n/ if $.>1 && /^\d+/; printf "%s",$_' file
20141101 server contain dump
20141101 server contain nothing {uekdmsam ikdas jwdjamc ksadkek} ssfjddkc * kdlsdlsddsfd jfkdfk
20141101 server contain dump
그러나 이는 최종 개행을 제거합니다. 다시 추가하려면 다음을 사용하십시오.
$ { perl -lne 's/^/\n/ if $.>1 && /^\d+/; printf "%s",$_' file; echo; } > new
설명
은 -l
후행 줄 바꿈을 제거하고 대신 각 print
호출 에 하나를 추가 하므로 printf
대신 사용 합니다. 현재 행이 숫자 ( /^\d+/
)로 시작 하고 현재 행 번호가 1보다 큰 경우 ( $.>1
, 시작 부분에 빈 줄)을 입력하여 줄의 시작 부분에 a \n
를 추가하면 printf
각 줄 이 인쇄됩니다.
또는 모든 \n
문자를 \0
로 변경 한 다음 \0
숫자 문자열 바로 앞에있는 문자를 다시 변경할 수 있습니다 \n
.
$ tr '\n' '\0' < file | perl -pe 's/\0\d+ |$/\n$&/g' | tr -d '\0'
20141101 server contain dump
20141101 server contain nothing {uekdmsam ikdas jwdjamc ksadkek} ssfjddkc * kdlsdlsddsfd jfkdfk
20141101 server contain dump
8 개의 문자열 만 일치 시키려면 대신 다음을 사용하십시오.
$ tr '\n' '\0' < file | perl -pe 's/\0\d{8} |$/\n$&/g' | tr -d '\0'