sed : 두 줄 일치


11

레코드가 두 줄로 분할 된 텍스트 파일이 있습니다. 한 줄에 넣고 싶습니다. 기록은 다음과 같습니다.

2013-07-29
 apt-get install git
2013-07-29
 apt-get install rsync
2013-07-31
 apt-get install nmap
2013-08-02
 apt-get install cifs-utils
2013-08-05
 apt-get install telnet

나는 다음을 얻고 싶다 :

2013-07-29 apt-get install git
2013-07-29 apt-get install rsync
2013-07-31 apt-get install nmap
2013-08-02 apt-get install cifs-utils
2013-08-05 apt-get install telnet

로 시도했지만 sed두 줄을 일치시킬 수 없습니다. 몇 가지 트릭이 있습니까 sed, 아니면 더 나은 도구가 있습니까?


두 줄을 일치시키려는 것 같지 않으며 일치하는 것을 찾은 후 더 줄을 연결하려고합니다. 예?
kurtm

답변:


13
sed 'N;s/\n/ /'
  • N 다음 입력 라인을 패턴 공간에 결합
  • s/\n/ / 줄을 공백으로 구분하는 줄 바꾸기를 바꿉니다.

또는:

sed -n 'N;s/\n/ /;/regex/p'
  • -n 마지막 명령으로 패턴 공간의 자동 인쇄를 비활성화합니다
  • /regex/p 정규식과 일치하는 줄을 인쇄합니다

g예를 들어, 두 줄 이상을 연결하는 경우 대체를 위해 수정자를 사용하십시오 N;N;N;s/\n/ /g.


기억하십시오 : sed는 라인에서 작동합니다! 나는 sed 's/>\n</>,</'sed가 한 번에 라인에서 작동한다는 것을 깨달을 때까지 여러 해 동안 일 하려고 노력했다 . 한 번의 빠른 duckduckgo 검색과 @peterph 덕분에 나머지 머리를 유지할 수있었습니다
Northern-bradley

6

apt-get줄 앞에 공백이있는 것 같습니다 . 속담:

sed -e :a -e '$!N;s/\n / /;ta' -e 'P;D' inputfile

원하는 결과를 산출해야합니다.

또는 다음을 사용할 수도 있습니다 paste.

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