개발자 노트
입력확인: 알파벳과 숫자만으로 구성된 입력 허용 본문
사용자가 입력한 문자열의 유효성 검사 스크립트
#스크립트 코드
스크립트의 논리는 sed 기반의 변환으로 입력 내용을 바꿔 새로운 버전의 입력 데이터를 생성한 다음, 새로운 버전과 원래의 버전을 비교하는 것이다.
"유효한 문자를 제거한 후에 남은 것을 확인하는" 접근방식은 상당한 유연성을 갖는다는 점에서 좋다.
대문자를 유효한 문자로 처리하면서 공백이나, 콤마, 마침표도 허용하고 싶다면, 단순히 대체할 패턴을 다음과 같이 바꾸면 된다.
sed 's/[^[:upper:] ,.]//g'
전화번호의 입력이 유효한지(정수, 공백, 괄호, 대쉬 등을 허용) 확인하기 위한 테스트는 다음과 같다.
sed 's/[^[:digit:] \(\)-]//g'
그러나 정수 값만을 허용하려 할 때에는 조심할 점이 있다.
sed 's/[^[:digit:]]//g'
위의 명령만으로 음수를 허용하기는 어렵다. 음수 기호(-)를 추가한다하더라도 -1-2 역시 유효한 입력으로 인정이 될 것이다.
음수를 처리하는 문제는 다음에 소개하겠다.
* sed 명령어
sed는 대화형 기능이 없는 편집기이다. 명령행에서 직접 편집 명령어와 파일을 지정하여 작업한 후 결과를 화면으로 확인한다. sed 편집기는 원본을 손상하지 않는다. 리다이렉션을 이용하여 편집 결과를 파일로 저장하여 확인할 수 있다.
3. 메타문자
: grep 등과 마찮가지로 sed는 패턴검색을 위하여 특별한 메타문자를 제공한다.
[] : [] 사이의 문자 집합중 하나와 대응
ex) /[Ll]ove/ : Love 또는 love를 포함한 행
[^] : 문자 집합에 속하지 않는 한 문자와 대응
ex) /[^A-K]ove/ : A 와 K 사이의 범위에 포함되지 않는 한 문자와 ove가 붙어있는 문자열
4.3 치환 : s
sed 's/love/peace/g' datafile
: love를 peace로 치환한다. g플래그는 행 전체에 치환이 적용됨을 의미한다. g플래그가 없으면 행에서 맨 처음 등장하는 love만 peace로 치환된다.
sed 's#3#99#g' datafile
: s 명령어 바로 다음에 오는 문자는 검색열과 치환열을 구분해주는 구분자이다. 기본적으로 /를 구분자로 사용하지만, 다른 문자로 바꾸어 쓸 수 있다. 이는 / 자체를 포함하는 문자열을 검색할 때 유용하다.
4.5 다중 편집 : e
sed -e '1,3d' -e 's/love/peace/' datafile
: 첫 번째 명령은 1행부터 3행까지 삭제하고, 두 번째 명령은 love를 peace로 치환하는 것이다.
http://hyunkie.tistory.com/51
* echo -n
-n 옵션은 줄바꿈을 하지 않는다.
(아래 그림 참조)
-n 옵션 사용)
-n 옵션 미사용)
* read
사용자 입력을 읽어 올 때 사용한다.
1) 파일이나 터미널로부터 입력을 읽어 오기 위해서는 내장 명령 read를 사용한다
2) read명령은 개행문자가 나타날 때까지 줄을 읽어들인다
3) 입력받은 내용을 저장할 특별한 이름을 지정하지 않으면, read는 REPLY라는 특수내장 변수에
값을 저장한다
4) read 명령과 옵션
- read answer : 표준 입력에서 한줄을 읽어서 변수 answer에 저장한다.
- read first last : 표준 입력에서 한줄을 읽어서, 그 중 첫 단어는
변수 first에 저장하고 나머지는 last에 저장한다.
- read : 입력을 REPLY에 저장한다.
- read -a arrayname : 입력받은 단어 목록을 arrayname라는 배열에 저장한다.
- read -e : 입력줄에서 명령줄 편집을 사용할 수 있다.
- read -p prompt : prompt를 출력하고 입력을 기다린다.
- read -r line : 입력에 역슬래시를 쓸 수 있게 허용한다.
http://linuxism.tistory.com/56
'▶ INBOX ◀' 카테고리의 다른 글
OS 개발 코드 분석 (0) | 2016.09.27 |
---|---|
Ch01_PC구조부터 어셈블리 입문까지 (0) | 2016.09.22 |
PATH에서 프로그램 검색 (0) | 2016.09.20 |
구조체 프로그래밍 (0) | 2016.09.20 |
[Linux] 명령어 모음 (0) | 2016.09.20 |