Computer Science/[19-상] Linux Bash Script14 [Linux_bash] \(back slash, escape character)의 의미 리눅스 쉘 스크립팅에서는 특별한 의미를 갖는 기호들이 있다. 이런 기호들은 정규표현식으로 패턴을 찾기 위해 사용한다. 대표적으로, ^ 행의 시작 $ 행의 끝 . 하나의 문자 [] [] 안에 있는 집합 중 하나와 대응 [^ ] [] 안에 있는 집합에 속하지 않음 * 문자 뒤에 써서, 그 문자와 같은 문자가 0개 혹은 그 이상 존재함 이외에도 많은 문자들이 있는데, 만약 .이 있는 문자열을 찾고 싶을 때 grep "." filename 이렇게 쓰면 파일 안에 있는 모든 문자를 grep한다. 따라서 이런 경우에 grep "\." filename 이런 식으로 escape해서 .이 특별한 의미를 지니지 않고, 문자 그대로 .을 나타낸다고 할 수 있다. # 문제 ① file1은 csv파일이다. ② 첫번째 필드가 아.. 2020. 3. 3. [Linux_bash] regex,vi: 큰 수를 영어 숫자 단위(B,M,K)로 변경하기 vi 편집기에서 치환하는 명령어를 사용하면 많은 숫자가 나열되어있는 큰 수를 영어 숫자 단위로 변경할 수 있다. vi test2.txt :%s/^\([0-9]\{1,3\}\)[0-9]\{3}$/\1K/g -> 천을 K로 :%s/^\([0-9]\{1,3\}\)[0-9]\{6}$/\1M/g -> 백만을 M으로 :%s/^\([0-9]\{1,3\}\)[0-9]\{9}$/\1B/g -> 십억을 B로 ^,$: 문자열의 시작과 끝을 알린다. 만약 시작과 끝을 표시하지 않으면 K로 고치는 과정에서 124K64K 456K568 895K53 378K 이렇게 나온다. \([0-9]\{1,3\}\): 임의의 숫자가 1~3번 있음을 그룹으로 묶는다. [0-9]\{3}: 숫자가 세개 존재한다. \1: 첫번째 그룹을 의미한다. 2020. 2. 29. [Linux_bash] find,rm,cp: | (파이프라인) 이 작동하지 않을 때 find 명령어를 사용하다 보면 파이프라인이 작동하지 않는 경우가 있다. 파이프라인 (|)은 전 명령어의 stdout (표준출력)을 다음 명령어의 stdin (표준입력)으로 바꿔주는 역할을 한다. 예를 들어서 1. find와 rm 조합 find -name . directory1 | rm -> X rm 명령어는 stdin을 무시하는 명령어이다. 이런 경우 xargs 명령어를 사용하면 해결이 된다. xargs 명령어는 stdout을 arguments(인자)로 전달해 명령을 실행한다. 또한 여러가지 옵션을 더해서 사용할 수도 있다. ( man xargs 로 확인 ) find -name . directory1 | xargs rm 혹은 find -name . directory1 -exec rm {} \; 이렇게 .. 2020. 2. 29. [Linux_bash] regex: 정규표현식 그룹(captured group) 이용하기 정규표현식을 사용할 수 있는 명령어를 쓸 때 특정 패턴을 그룹 지어놓으면 편리할 때가 많다. 그룹을 짓는 방법: \(패턴\) 예를 들어서 1. 특정 문자 패턴이 반복되는 것을 찾을 때 찾고싶은 것이 특정 년도의 뒷자리 2개와 날짜가 같은 경우라고 생각하자. YYYY/MM/DD -> 이 두개가 같은 경우 grep '..\(..\)/../\1' filename ..: 처음의 점 두개는 YYYY 이다. \(..\): 뒤의 점 두개 (YYYY)는 그룹으로 묶었다. 점은 임의의 문자 하나를 의미한다. /../: 월(month)를 의미 \1: 첫번째 그룹을 의미 이렇게 같은 패턴이 나중에 또 나올 때 그룹으로 묶어서 불러오면 편리하다. 불러오는 방법은 \1, \2 .. 와 같이 백슬래쉬 뒤에 숫자를 붙인다. 숫자는.. 2020. 2. 29. [Linux_bash] pr,sed,grep: 문서 양식화하고 여백 지우기 pr 명령어는 프린트를 할 때 보기 좋게 문서 파일을 양식화하고 standard output으로 내보낸다. syntax: pr [option] [filename] 파일의 행 디폴트 값은 66줄로, 텍스트 파일이 66줄보다 짧다면 나머지는 여백으로 처리된다. # 텍스트 파일에서 여백(빈 줄) 지우기 sed -r '/^\s*$/d' sed '/^$/d' grep -v '^$' 간단한 방법으로 이렇게 세가지를 주로 사용한다. ^ : 문장의 시작을 의미한다. $ : 문장의 끝을 의미한다. 따라서, ^$ : 문장에 아무 문자도 없음을 의미한다. 명령어를 종합해서 써보면, pr filename | sed '/^$/d' 2020. 2. 29. [Linux_bash] redirection 이해하기 redirection은 stdin(표준입력) , stdout(표준출력) , stderr (표준에러) 등을 파일로 저장할 때 사용된다. 특히 출력 redirection에 대해서 알아보자면, >: 새로운 파일을 생성할 때 사용한다. 예를들어, 새로운 텍스트 파일을 만들 때 cat 명령어와 함께 사용한다. cat > text.txt >>: 파일에 내용을 추가할 때 사용한다. 내용을 덧붙이고 싶을 때 >를 쓰면 치환된다. redirection을 이용해서 오류메세지를 저장한 파일을 만들 수 있다. # 오류메세지 redirection 하는 법 command line 2> filename command line에서 난 오류 (2)를 filename이라는 파일에 저장한다. # 오류메세지가 나타나지 않게 하는 법 리눅스.. 2020. 2. 20. [Linux_bash] regex,sort: 엑셀 파일에서 column 별로 sort하기 엑셀 파일을 행 별로 정렬하는 방법을 알아보자. 1. field를 정해서 sort 명령어를 쓰는 법 sort - t "," -k 5 filename -t: 구분자를 지정하는 옵션 ",": ,(쉼표)를 구분자로 지정 -> 엑셀 파일을 리눅스에서 불러오면 행이 쉼표로 나누어져 있다. -k: 필드를 지정하는 옵션 위의 명령어에서는 5번째 필드를 선택했다. 2. vi 에서 field를 정하고 sort 명령어를 쓰는 법 (복잡) vi filename :sort \([^,]*,\)\{4} vi 에서 sort 명령어를 사용하면 정규표현식으로 패턴을 지정하고 그 패턴에 해당하는 것을 정렬할 수 있다. [^,]: ,가 있지 않음 [] 안의 맨 앞에 ^를 써주면 포함되지 않음을 의미 *, 0개 이상의 문자와 쉼표 \([^.. 2020. 2. 20. [Linux_bash] regex,grep: 엑셀 파일에서 두개의 단어로 된 셀 찾기 엑셀로 작성된 파일 (.csv)를 리눅스에서 열면 콤마 (,)로 데이터가 연결되어 있다. 이 때 단어가 두개 = 띄어쓰기가 한번 되어있는 행을 찾는 명령어는 아래와 같다. grep ",[a-zA-Z]* [a-zA-Z]*," filename [a-zA-Z]: 대소문자 구별 없이 알파벳 중 하나 *: 앞의 문자가 한번 또는 여러번 반복 grep ",[a-zA-Z].* [a-zA-Z].*," filename -> . 이 임의의 문자를 뜻해서 ,나 띄어쓰기도 포함하기 때문에 이렇게 적으면 콤마 사이에 띄어쓰기 한번을 의미하지 않는다. 2020. 2. 11. 이전 1 2 다음