SED
Posts
13 posts[bash: sed] 리눅스에서 윈도우 텍스트 파일의 CR(캐리지 리턴) 제거
윈도우에서 만들어진 텍스트 파일의 일부분을 리눅스쪽에서 가져다가 작업하면서 발생했던 문제다. grep을 이용해서 파일의 특정한 부분을 가져온 후에 다른 내용과 조합해서 출력해야 하는 상황이었다. 대략 아래의 예시와 같다. # from_windows.txt 파일 내용중 처음 출현한 시간(HH:MM:SS 형식) 추출 및 출력 time_val=`cat from_windows.txt | grep "[012][0-9]:[0-5][0-9]:[0-5][0-9]" | head -1` echo "$time_val 발견!" 발견!55 추출한 값을 변수 time_val에 저장한 후에 echo 명령으로 위의 예시와 같이 출력을 했는데, 변수값 뒤에 출력되어야 할 문자열이 맨 앞으로 오는 문제가 발생. 이렇게 되
[bash: sed] 특정한 문자열이 포함된 행 삭제하기
텍스트 파일에서 특정한 문자열이 포함된 행을 삭제하고 싶을 경우, sed에서 간단하게 작업이 가능하다. 삭제하고자 하는 문자열을 "/문자열/d" 형태로 지정해 주면 된다. 아래의 예시를 보자. # my_data.txt 파일에서 "abcdefg"가 포함된 행을 제거하고 화면에 출력 sed '/abcdefg/d' my_data.txt 위의 명령을 실행하면 my_data.txt 파일에서 문자열 "abcdefg"가 있는 행을 제거한 후 화면에 결과를 출력한다. 파일 자체를 수정하여 저장하고 싶다면 -i 옵션을 추가하자. (-i 옵션에 대한 내용은 이전 게시물을 참고하자. 여기로) # my_data.txt 파일에서 "abcdefg"가 포함된 행을 삭제하고 저장 sed -i '/abcdefg/d'
[bash: sed] 대용량 파일에서 특정 위치의 행만 출력하기
파일에서 특정한 행을 출력하기 위해서 sed 명령을 활용하게 되는데, 통상 아래의 예시와 같은 형태로 쓰게 된다. # my_data.txt 파일에서 124번째 행을 출력 sed -n 124p my_data.txt # my_data.txt 파일에서 100번째 행부터 110번째 행까지 출력 sed -n 100,110p my_data.txt 파일 용량이 별로 크지 않으면 위와 같은 형태로도 별 문제가 없다. 그러나 수백MB 이상의 대용량 파일에서 특정 부분을 출력해야 하는 경우에, 특히 이런 작업을 여러번 반복해야 하는 경우에는 상당한 시간이 걸릴 수 있다. 예를 들어 500MB 파일에서 100번째 행만 출력하는 상황이라도, sed는 파일을 처음부터 끝까지 다 읽은 후에 작업을 종료하기
[bash: sed] 텍스트 파일의 문자열 수정/변경
sed에서 -i 옵션을 추가하면 작업한 내용이 텍스트 파일에 반영되어 저장된다. 우선 간단한 예시를 보자. my_data.txt 파일에서 문자열 "abc"를 "123"으로 대체하는 경우다. -i 옵션이 없으면 대체된 내용이 화면으로 출력된다. # 파일 내용 확인 cat my_data.txt abc def abc 111 # "abc"를 "123"으로 대체 sed 's/abc/123/' my_data.txt 123 def 123 111 # 대체한 결과를 my_data.proc.txt에 저장 (I/O 리다이렉션) sed 's/abc/123/' my_data.txt > my_data.proc.txt -i 옵션을 추가하면 결과를 화면에 출력하는 대신 해당 파일을 변경하여



