패턴 라인과 쉼표로 구분되고 ()로 묶인 비어 있지 않은 연속 라인을 연결합니다.

패턴 라인과 쉼표로 구분되고 ()로 묶인 비어 있지 않은 연속 라인을 연결합니다.

다음이 포함된 파일이 있습니다.

click
css_add_violation_false

click
css_add_claim_false

그리고

select
css_driver1_birth_date_month
birth_date_month

select
css_driver1_birth_date_day
birth_date_day

click[newline]값을 click(값)으로 바꾸는 방법은 무엇입니까?
또는 [줄바꿈] 값 [줄바꿈] 값을 클릭한 후 (값, 값)을 클릭합니다.

sed여러 줄의 내용에 맞지 않기 때문에 이해할 수 없습니다 .

나는 다음을 사용하여 tr캐리지 리턴을 제거하려고 했습니다.

tr 'select\n' 'select('

그러나 이것은 모든 캐리지 리턴을 제거하고 많은 것을 추가합니다.(

(참고: OSX)

원하는 출력:

click(css_add_violation_false)
click(css_add_claim_false)

그리고

select(css_driver1_birth_date_month, birth_date_month)
select(css_driver1_birth_date_day, birth_date_day

빈 줄이 나타날 때까지 여러 인수를 처리할 수 있다면 이것이 더 일반적인 대답이 될 것입니다.

답변1

그리고 awk:

awk '{if($0=="click"){getline n;printf "%s(%s)\n", $0, n}else{print}}' file

행이 일치하면 click다음 행이 명명된 변수에 로드되고 n원하는 출력 형식이 인쇄됩니다.

편집하다:

가변 개수의 줄이 있고 빈 줄이 생길 때까지 이를 결합하려면 다음 명령을 사용합니다.

awk '{if($0=="click"){getline n; printf "%s(%s", $0, n;
  while($0!=""){printf ",%s", $0; getline};
  printf ")\n\n", x}else{print}}' file

빈 줄이 발견될 때까지 쉼표로 구분된 줄을 인쇄합니다.

답변2

perl작업을 위한 훌륭한 도구입니다.

$ perl -p00e 's/click\n(.*)\n/click(\1)\n/' file
click(css_add_violation_false)

click(css_add_claim_false)

답변3

~을 위한GNU sed

sed -Ez 's/(click)\n([^\n]*)/\1(\2)/g'

아니면 옛날 스타일

sed '/click/{N;s/\n/(/;s/$/)/;}'

관련 정보