2줄을 1줄로 병합해야 합니다 stdout
. 새 줄을 공백 1개와 공백 4개로 바꾸세요. 공백이 없는 새 줄은 건드리지 마세요.
tcpdump -vvv ... -l | xyz
출력은 다음과 같습니다.
2014-06-06 AAA
BBB
2014-06-06 CCC
DDD
하지만 나는 다음이 필요합니다:
2014-06-06 AAA BBB
2014-06-06 CCC DDD
답변1
더 많은 오류 수정을 제공하기 위해 이를 편집했습니다.
sed의 "N" 명령은 다음 줄을 추가합니다. 줄 바꿈과 여러 공백을 바꾸려면 이것을 바꾸기와 함께 사용하십시오.
$ cat foo | sed 's/^/ /'
2014-06-06 AAA
BBB
2014-06-06 CCC
DDD
2014-06-06 EEE
2014-06-06 FFF
GGG
나의 새로운 답변:
$ sed ':a;$!{N;s/\n //;ba;}' foo
2014-06-06 AAA BBB
2014-06-06 CCC DDD
2014-06-06 EEE
2014-06-06 FFF GGG
이것은 이전 답변보다 훨씬 나은 것 같습니다.
$ sed '/^[^ ]/N;s/\n //' foo
2014-06-06 AAA BBB
2014-06-06 CCC DDD
2014-06-06 EEE
2014-06-06 FFF
GGG
또는 @mikeserv가 나열한 아름다운 것.
$ sed -n 'h;n;H;x;s/\n */ /p' foo
2014-06-06 AAA BBB
2014-06-06 CCC DDD
2014-06-06 EEE 2014-06-06 FFF
GGG
답변2
awk -v ORS= '/^ {4}/{print substr($0,4); next}
{print s $0; s="\n"}
END{print s}'
이 입력은 다음 입력에 작동해야 합니다.
2014-06-06 AAA
BBB
2014-06-06 CCC
DDD
EEE
2014-06-06 EEE
2014-06-06 FFF
그리고 다음을 생산합니다:
2014-06-06 AAA BBB
2014-06-06 CCC DDD EEE
2014-06-06 EEE
2014-06-06 FFF
그리고 perl
:
perl -0777 -pe 's/\n {4}/ /g'
그러나 이는 먼저 메모리에서 while 입력을 소비하는 것을 의미합니다.
답변3
echo "2014-06-06 AAA
BBB
2014-06-06 CCC
DDD
" | paste - - | tr -s '[:blank:]' '[ *]'
2014-06-06 AAA BBB
2014-06-06 CCC DDD
답변4
또 다른 awk
명령은,
$ awk '{var=$0; getline; print var,$1}' file
2014-06-06 AAA BBB
2014-06-06 CCC DDD