다음이 포함된 파일이 있습니다.
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/$/)/;}'