sed 명령시 개행문자 제거 하려면 어떻게 해야 할까요?
글쓴이: hak3y / 작성시간: 목, 2007/07/12 - 6:15오전
안녕하세요..
sed 명령으로 a.txt파일에서 아래와 같은형식을
-before-
aaa:
bbb
ccc:
ddd
eee:
ffff
-after-
aaa:bbb
ccc:ddd
eee:fff
이렇게 하고 싶어서
sed s/\:\n//g a.txt
sed s/\:\n/''/g a.txt
sed s/'\:\r\n'//g a.txt
등등 여럿 테스트 해보았는데 안되더군요..
반대로 개행추가하는건 되던데...삭제 하는하려면 어떤형식으로 해야하는지 알려주세요..
Forums:
음... perl -p -e "s|:\n|:|"
음...
perl -p -e "s|:\n|:|" a.txt
sed 는 stream editor 입니다.
기본적으로 한 라인씩 입력받아서 끝의 \n 을 없앤 뒤 요청된 처리를 한 다음에 다시 \n 을 붙여서 출력해주는 방식이니 ... 힘들 것 같습니다.
OTL
감사합니다~~!
=야간질주=
아 아침에 일찍 일어나셨네요?ㅎㅎ
아 perl이라는것도 있군요.`` 리눅스 연습생이라...
감사합니다 많은 도움되었습니다~~
=야간질주=
한 줄로 만든 다음에
한 줄로 만든 다음에 처리하고, 다시 여러 줄로 나누는 방법.
cat a.txt|tr ":\n" ": "|sed "s|: |:|g"|sed "s| |\n|g"
OTL
그냥 sed만으로
그냥 sed만으로 해결하는 방법입니다.
/:$/N가 : 로 끝나는
: 로 끝나는 행이면 한 줄 더 읽어서 붙여라 라는 뜻인가요 ?
OTL
다음 줄을 읽어서
다음 줄을 읽어서 현재 패턴 공간에 넣으란 말이 됩니다.
따라서 현재 패턴 공간은
aaa:
bbbb
가 되기 때문에 여기서는 \n 을 처리할 수 있습니다.
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
공부하다가 뒤에 올사람을 위해
sed -e '{N;s/\n//}'
sed 작동원리는 파일 내 문서를 한 줄씩 읽어들여서 처리한다
먼저 줄바꿈을 없애고 요청한 명령을 수행한 다음 다시 줄바꿈을 붙여서 출력
처리할 문장 내에 줄바꿈이 없기 때문에 아무리 해도 원하는 값을 얻을 수 없다
N을 앞에 붙이면 그 다음 줄까지 한 줄로 처리해서 읽어
첫 줄과 두번 째 줄 사이 줄바꿈은 살아있게 되서 접근이 가능
물론 두번 째 줄 줄바꿈은 제거되고 실행된다
요청한 명령 s/\n//을 실행한 뒤 줄바꿈을 붙여서 출력
결론 두줄씩 읽어들여서 요청 처리하고 줄바꿈해서 출력
N 옵션은 아래 글 참고하였습니다(패턴공간 액세스)
https://soooprmx.com/archives/8272
bushi / sed 처리방식을 알려줘서 고마워요
sort + tr + sed로 하다가 sort + sed로 줄여보려다가 여기까지 왔네요
댓글 달기