Rev_ration 및 sync라는 세 개의 필드 이름이 있는 파일이 있습니다. 여기서는 (콜론으로 구분) 다음과 같습니다.
##Increase
JOe:4.8:7
##Check as per revision 67
jonny:[5:9]:[7:0]
##Check as per revision 56
Salman:q[0:234]:5
처음에는 대괄호 안의 :를 !로 바꿨습니다. 두 번째로 AWK를 실행합니다. 셋째, 교체하고 싶다! 대괄호 안에 있습니다. 아래 코드를 시도하고 있습니다.
#!/bin/bash
sed 's/\([[0-9]\+\)!\([0-9]\+]\)/\1:\2/g' t5 >> t6
awk -F: '/^$/ /^#/ {c=$0; sub(/#+/,"", c); next}
{print $1,$2,"- message", "\"" c "\""}' t6 >> t7
sed 's/\([[0-9]\+\)!\([0-9]\+]\)/\1:\2/g' t7 >> t8
Getting syntax error
위 코드는 잘 작동하지만 빈 줄을 무시할 수는 없습니다.
입력 파일에서 빈 줄을 제거해야 합니다.
원하는 출력
JOe:4.8:7 - message "Increase "
jonny:[5:9]:[7:0] - message "Check as per revision 67"
Salman:q[0:234]: - message "Check as per revision 56"
세 가지 명령을 모두 결합하는 방법과 빈 줄을 제거하는 방법.. 위에 표시된 코드를 사용하여 문제를 해결하는 방법
답변1
-로 구분된 필드를 사용 하여 실제로 아무 작업도 수행하지 않는 것 같으므로 :
로 시작하는 줄에 집중하여 ##
해당 줄에서 텍스트를 선택하고 다음 줄에 텍스트를 삽입할 수 있습니다.
다음만 사용하세요 sed
:
$ sed '/^$/d; /^##/{ s///; h; d; }; G; s/\n\(.*\)/ - message "\1"/' file
JOe:4.8:7 - message "Increase "
jonny:[5:9]:[7:0] - message "Check as per revision 67"
Salman:q[0:234]:5 - message "Check as per revision 56"
이 표현식은 다음을 사용하여 sed
빈 줄을 제거합니다 . /^$/d
그런 다음 그 뒤에 오는 모든 텍스트를 ##
예약된 공간에 저장합니다( h
초기 공간을 삭제한 후 ##
예약된 공간에 저장되었을 수 있는 모든 내용을 대체 ). 공백이 아닌 다른 줄이나 로 시작하는 줄의 경우 ##
예약된 공간에 텍스트를 추가 G
하고 추가된 텍스트 앞에 가 붙고 - message "
로 끝나도록 수정합니다 "
.