sed 관련 질문
639
1 asked
sed롤 통해 ip와 디스플레이 변수를 추출하는 구문을 만들어 봤는데 되긴 되는데 정확히 이해가 가지 않습니다.
who -am|sed 's/.\+(\(.\+\))$/\1/'|cut -d '.' -f 1,2,3,4
's/.\+(\(.\+\))$/\1' 이 부분을 어떻게 수정하닥 되긴 됐는데 정확히 이해가 가지 않습니다.
풀어서 설명 해주실 수 있나요??
Answer 2
0
김용권님! 안녕하세요~~
아래 두가지 표현은 실행시 결과적으로는 큰 차이가 없습니다.
cut 명령어는 delimiter dot(.) 을 사용함으로써 파이프로 넘겨받은 문자열이 아이피 어드레스인지를 검사하고 있네요. 이 글의 맨 마지막 부분을 보시면 더 효과적인 방법을 보실 수 있어요.
who -am|sed 's/.\+(\(.\+\))$/\1/'|cut -d '.' -f 1,2,3,4
who -am|sed 's/.\+(\(.\+\))$/\1/'
이 예문은 sed 명령어 활용 부분이 핵심입니다.
아래와 같이 정리해드립니다.
sed 명령어는 기본적으로 BRE(Basic Regex Expression) 을 지원합니다.
표현식에서 메타 문자 (){}+?| 는 이스케이프(ESCAPE) 가 필요합니다
보시기 좋게 각 명칭을 색상으로 구분하여 달아놓았습니다.
sed 's/.\+(\(.\+\))$/\1/' # 그룹설정
sed 's/.\+(\(.\+\))$/\1/' # 첫번째 매칭 그룹
sed 's/.\+(\(.\+\))$/\1/' # 문자열의 마지막을 나타내는 메타문자
sed 's/.\+(\(.\+\))$/\1/' # (192.168.0.93)
sed 's/.\+(\(.\+\))$/\1/' # ANY 문자의 반복
sed 명령어에 옵션( -r ) 을 사용하면 확장 정규 표현식(ERE)을 사용하실 수 있습니다.
이 경우는 BRE 에서와 달리 표현식에서 메타 문자 (){}+?| 는 이스케이프(ESCAPE) 하지 않습니다.
sed -r 's/.+\((.+)\)$/\1/'. # 그룹설정
sed -r 's/.+\((.+)\)$/\1/'. # 첫번째 매칭 그룹
sed -r 's/.+\((.+)\)$/\1/'. # 문자열의 마지막을 나타내는 메타문자
sed -r 's/.+\((.+)\)$/\1/'. # (192.168.0.93)
sed -r 's/.+\((.+)\)$/\1/'. # ANY 문자의 반복
보시는 바와 같이 sed 명령어에 옵션( -r ) 을 함께 적으면 이스케이프 문자가 적게 사용됨으로써 ERE 방식이 BRE 방식에 비해 가독성이 조금 더 좋아집니다.
마지막으로 다른 표현 한 가지를 보여드리면서 글을 마무리 하겠습니다.
sed -r 's/.+\(([[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3})\)$/\1/'
이 예문의 경우 아이피 어드레스를 정규식으로 검증할 수 있다는 장점이 있습니다.
행복한 하루되세요~~. 감사합니다:D
0
김용권님! 반갑습니다^^
sed 명령어를 이용한 문자열 서브스트링에 관련된 질문을 하셨네요.
(1)who -am 명령 실행 후 화면에 출력된 결과와
(2)who -am|sed 's/.\+(\(.\+\))$/\1/'|cut -d '.' -f 1,2,3,4 명령 실행 후 화면에 출력된 결과 를 각각 좀 보여주실 수 있으실까요?
그럼 좀 더 효과적인 답변을 드릴 수 있을 것 같아서요:)
0
빠른 답변 주셔서 감사합니다.
아래와 같이 출력이 됩니다.
[root@kb shell_cmd]# who -am
pts/1 2021-08-05 15:46 0 id=/1 term=0 exit=0
root + pts/1 2021-10-01 09:44 . 63600 (192.168.0.93)
[root@kb shell_cmd]# who -am|sed 's/.\+(\(.\+\))$/\1/'|cut -d '.' -f 1,2,3,4
192.168.0.93
59회차 학습 미작동
0
64
2
BASH_REMATCH 변수가 어디서 나온거죠?
1
909
1
${object%%:*}, ${object#*:}는 어떤 뜻인가요
2
396
1
./euid.sh
2
397
1
touch 'Gone with the wind.mp3' 입력 결과가 다릅니다
1
363
1
스크립트에서 %는 무엇을 의미하나요?
1
519
1
하드 링크, 심볼릭 링크
1
688
2
[..]와 테스트 강의에서
1
388
1
하드 링크, 심볼릭 링크
0
631
1
변수명이 출력되지 않습니다.
1
284
1
변수명 출력이 되지 않습니다.
0
345
1
select in case문 질문
0
230
1
crontab 질문이 있습니다.
1
224
2
(..)_(..) 와 BASH_REMATCH
1
747
1
^[.+] 정규표현식이 RegExr 를 나타내는게 맞나요?
1
386
2
실습자료를 다운받은 다음에 어떻게 해야 하나요?
0
435
3
sudo cp helloworld.sh /usr/bin 명령어 질문
1
603
1
read -p 명령어가 동작하지 않습니다.
2
350
1
wc 명령어에 -L 옵션이 동작하지 않습니다.
1
436
1
book이 변수가 아니라 파일인가요?
1
355
1
파일접근권한 강의
1
142
1
[] 결과
2
209
1
# (주석) 관련 질문 드립니다.
1
162
1
bash 타이핑 정보 읽어들이기
1
208
1

