shell_script

shell 기본 명령문

sysman 2021. 7. 27. 19:28

 

if문

//기본 사용형식
if [첫째 조건문]
then
  수행문
elif [두번쨰 조건문]
then
  수행문
else
  수행문
fi
조건식 설명
if[$변수 연산자 $변수]; then 일반적인 조건식 타입으로 두 변수의 값을 비교할때 사용
if[$변수 연산자 조건값]; then 조건값이 고정되어 있을 경우 변수와 조건값을 비교할때 사용
if[연산자 $변수]; then 변수의 값이 문자열이거나 디렉토리와 같은 경우일때 주로 사용
if[조건식] 연산자[조건식]; then 여러 개의 조건식을 AND나 OR로 복합 연산할때 사용
[team01@test1 stest]$ cat if1.sh
#!/bin/bash
val1=10
val2=10

# if [ $val1 = $val2 ]; then 한줄로 쓸때는 이렇게..
if [ $val1 = $val2 ]
then
        echo True
else
        echo False
fi

# 두 값이 같으면 True
[team01@test1 stest]$ sh if1.sh
True



###########################################################

[team01@test1 stest]$ cat if2.sh
#!/bin/bash
val=0
if [ $val = 0 ]
then
        echo True
else
        echo False
fi
[team01@test1 stest]$ sh if2.sh
True


#############################################################
[team01@test1 stest]$ cat if3.sh
#!/bin/bash

val=""
# -z 는 변수에 저장된 값의 길이가 0인지 비교해서 0이면 true 아니면 false
if [ -z $val ]
then
        echo True
else
        echo False
fi
[team01@test1 stest]$ sh if3.sh
True

############################################################

#val값이 0보다 크고, 10보다 작은면 True
[team01@test1 stest]$ cat if4.sh
#!/bin/bash
val=5
if [ $val -gt 0 ] && [ $val -lt 10 ]
then
        echo True
else
        echo False
fi
[team01@test1 stest]$ sh if4.sh
True

 

 

 

 

 

 

switch-case문

switch-case 문

case $변수 in
  조건값1)
  수행문1 ;; 
  조건값2)
  수행문2 ;;
  조건값3)
  수행문3 ;;
  *)
  수행문4
esac
[team01@test1 stest]$ cat case.sh
#!/bin/bash

case $1 in
        start)
        echo "start"
        ;;
        stop)
        echo "stop"
        ;;
        restart)
        echo "restart"
        ;;
        help)
        echo "help"
        ;;
        *)
        echo "please input sub command"
esac

[team01@test1 stest]$ sh case.sh
please input sub command
[team01@test1 stest]$ sh case.sh start
start
[team01@test1 stest]$ sh case.sh stop
stop
[team01@test1 stest]$ sh case.sh restart
restart

 

반복문 for, while

for 변수 in [범위(리스트 또는 배열, 묶음)
do
  수행문
done



for (( 변수=초기값; 조건식; 증가값))
do
  수행문
done


while [$변수1 연산자 $변수2]
do
  수행문
done

 

#숫자 출력
[team01@test1 stest]$ cat for1.sh
#!/bin/bash
for num in 1 2 3
do
        echo $num;
done
[team01@test1 stest]$ sh for1.sh
1
2
3

###############################
#변수를 사용해서 출력
nums="1 2 3"
for num in $nums    #변수nums
do
        echo $num;
done
[team01@test1 stest]$ sh for2.sh
1
2
3
################################
[team01@test1 stest]$ cat for3.sh
#!/bin/bash

for file in $HOME/*   #자기계정 디렉토리 모두 출력
do
        echo $file;
done
[team01@test1 stest]$ sh for3.sh
/home/team01/Desktop
/home/team01/Documents
/home/team01/Downloads
/home/team01/Music
/home/team01/Pictures
/home/team01/Public
/home/team01/Templates
/home/team01/Videos
/home/team01/bionic-server-cloudimg-amd64.img
/home/team01/mylang.sh
/home/team01/mylang1.sh
/home/team01/nagios
/home/team01/stest
##################################
#1부터 2씩 증가하여 10까지 홀수만 출력
[team01@test1 stest]$ cat for4.sh
#!/bin/bash

for num in {1..10..2}
do
        echo $num;
done

[team01@test1 stest]$ sh for4.sh
1
3
5
7
9
##################################

# 1부터 5까지 출력
[team01@test1 stest]$ cat for5.sh
#!/bin/bash

for num in {1..5}
do
        echo $num;
done

[team01@test1 stest]$ sh for5.sh
1
2
3
4
5
#################################
#배열을 사용할때 ${배열[@]}로 표현해야 배열의 모든 아이템을사용할 수 있음
[team01@test1 stest]$ cat for6.sh
#!/bin/bash
array=("apple","banana","pineapple")
for fr in ${array[@]}
do
        echo $fr;
done

[team01@test1 stest]$ sh for6.sh
apple,banana,pineapple
[team01@test1 stest]$
################################
[team01@test1 stest]$ cat for6.sh
#!/bin/bash
array=("apple" "banana" "pineapple")
for fr in ${array[@]}
do
        echo $fr;
done

[team01@test1 stest]$ sh for6.sh
apple
banana
pineapple
################################
#for 조건문 사용
[team01@test1 stest]$ cat for7.sh
#!/bin/bash
for ((num=0; num<3; num++))
do
        echo $num;
done

[team01@test1 stest]$ sh for7.sh
0
1
2
###############################
###############################
[team01@test1 stest]$ cat while.sh
#!/bin/bash
num=0
while [ $num -lt 3 ]
do
        echo $num
        num=$((num+1))
done
[team01@test1 stest]$ sh while.sh
0
1
2

 

연산자

1)문자열 연산자

연산자 사용법 설명
-z if[ -z $변수 ] 문자열 길이가 0 이면 참
-n if[[ -n $변수 ]] 문자열 길이가 0이 아니면 참
#문자열이 0이면 true
[team01@test1 stest]$ cat z.sh
#!/bin/bash

if [ -z $1 ]
then
        echo True
else
        echo False
fi
#값이 없으므로 true
[team01@test1 stest]$ sh z.sh
True
#값이 있으므로 false
[team01@test1 stest]$ sh z.sh test
False






################################
#문자열이 0이 아니면 true
[team01@test1 stest]$ cat n.sh
#!/bin/bash

if [[ -n $1 ]]
then
        echo True
else
        echo False
fi
[team01@test1 stest]$
[team01@test1 stest]$ sh n.sh
False
[team01@test1 stest]$ sh n.sh test
True

 

2) 비교 연산자

연산자 사용법 설명
-eq if [ $변수1 -eq $변수2 ] 변수1 과 변수2 의 값이 같으면 참
-ne if [ $변수1 -ne $변수2 ] 변수1 과 변수2 의 값이 다르면 참
-gt if [ $변수1 -gt $변수2 ] 변수1 이 변수2 보다 값이 크면 참
-ge if [ $변수1 -ge $변수2 ] 변수1 이 변수2 보다 값이 크거나 같으면 참
-lt if [ $변수1 -lt $변수2 ] 변수1 이 변수2 보다 값이 작으면 참
-le if [ $변수1 -le $변수2 ] 변수1 이 변수2 보다 값이 작거나 같으면 참
> if (( $변수1 > $변수2 )) 변수1 이 변수2 보다 값이 크면 참
>= if (( $변수1 >= $변수2 )) 변수1 이 변수2 보다 값이 크거나 같으면 참
< if (( $변수1 < $변수2 )) 변수1 이 변수2 보다 값이 작으면 참
<= if (( $변수1 <= $변수2 )) 변수1 이 변수2 보다 값이 작거나 같으면 참

-eq : EQual

-ne : NEgative

-gt : Greater Than

-ge : Greater than Equal

-lt : Less Than

-le : Less than Equal

-d : Directory

-e : Exist

-L : symbolic Link

-r : Readable

-w : Writeable

-x : eXecute

-nt : Newer Than

-ot : Older Than

-ef : Equal File


[team01@test1 stest]$ var1=10; var2=10
[team01@test1 stest]$ if [ $var1 -eq $var2 ]; then echo True; else echo False; fi
True
[team01@test1 stest]$ if [ $var1 = $var2 ]; then echo True; else echo False; fi
True
[team01@test1 stest]$ var1=10; var2=20^C



[team01@test1 stest]$ var1=10; var2=20
[team01@test1 stest]$ if [ $var1 -ne $var2 ]; then echo True; else echo False; fi
True
[team01@test1 stest]$ if [ $var1 != $var2 ]; then echo True; else echo False; fi
True



[team01@test1 stest]$ if [ $var1 -gt $var2 ]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [ $var1 -ge $var2 ]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [ $var1 -lt $var2 ]; then echo True; else echo False; fi
True
[team01@test1 stest]$ if [ $var1 -le $var2 ]; then echo True; else echo False; fi
True




[team01@test1 stest]$ if (( $var1 > $var2 )); then echo True; else echo False; fi
False
[team01@test1 stest]$ if (( $var1 >= $var2 )); then echo True; else echo False; fi
False
[team01@test1 stest]$ if (( $var1 < $var2 )); then echo True; else echo False; fi
True
[team01@test1 stest]$ if (( $var1 <= $var2 )); then echo True; else echo False; fi
True
[team01@test1 stest]$

3)문자열 비교 연산자

연산자 사용법 설명
= if [ $변수1 = $변수2 ] 각 변수의 값이 같으면 참, 동일한 문자열이면 참
== if [ $변수1 == $변수2 ] 각 변수의 값이 같으면 참, 동일한 문자열이면 참
!= if [ $변수1 != $변수2 ] 각 변수의 값이 다르면 참, 서로 다른 문자열일 경우 참
> if [[ $변수1 > $변수2 ]] 변수1의 아스키 코드 값이 변수2 보다 크면 참
< if [[ $변수1 < $변수2 ]] 변수1의 아스키 코드 값이 변수2 보다 작으면 참
[team01@test1 stest]$ var1='abc'; var2='def'
[team01@test1 stest]$ if [ $var1 = $var2 ]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [ $var1 == $var2 ]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [ $var1 != $var2 ]; then echo True; else echo False; fi
True



[team01@test1 stest]$ if [[ $var1 > $var2 ]]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [[ $var1 < $var2 ]]; then echo True; else echo False; fi
True

4) 논리 연산자

연산자 사용법 설명
-a if [ 조건식1 -a 조건식2 ] AND 연산 조건식1이 참이고 조건식2도 참 일 때 true
-o if [ 조건식1 -o 조건식2 ] OR 연산, 조건식1 또는 조건식2 둘 중 하나라도 참이면 true
&& if [ 조건식1] && if [ 조건식2 ]
if [[ 조건식1 && 조건식2 ]]
AND 연산 조건식1이 참이고 조건식2도 참 일 때 true
|| if [ 조건식1] || if [ 조건식2 ]
if [[ 조건식1 || 조건식2 ]]
OR 연산, 조건식1 또는 조건식2 둘 중 하나라도 참이면 true
[team01@test1 stest]$ var1=10; var2=20; var3=30
[team01@test1 stest]$ if [ $var1 -lt $var2 -a $var2 -gt $var3 ]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [ $var1 -lt $var2 -o $var2 -gt $var3 ]; then echo True; else echo False; fi
True



[team01@test1 stest]$ if [ $var1 -lt $var2 ] && [ $var2 -gt $var3 ]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [ $var1 -lt $var2 ] || [ $var2 -gt $var3 ]; then echo True; else echo False; fi
True
[team01@test1 stest]$ if [[ $var1 -lt $var2 && $var2 -gt $var3 ]]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [[ $var1 -lt $var2 || $var2 -gt $var3 ]]; then echo True; else echo False; fi
True
[team01@test1 stest]$ if (( $var1 < $var2 )) && (( $var2 > $var3 )); then echo True; else echo False; fi
False
[team01@test1 stest]$ if (( $var1 < $var2 || $var2 > $var3 )); then echo True; else echo False; fi
True

5) 디렉토리 연산자

연산자 사용법 설명
-d if [ -d $변수 ] 변수 유형이 디렉토리이면 참
-e if [ -e $변수 ] 변수 유형이 디렉토리이거나 파일이면 참
#환경변수 home 값이 디렉토리면 true, 아니면 false
[team01@test1 stest]$ if [ -d $HOME ]; then echo True; else echo False; fi
True
#환경변수 home 값이 디렉토리 내에 a.txt 파일이 있으면 true, 아니면 false
[team01@test1 stest]$ if [ -e $HOME ]; then echo True; else echo False; fi
True

6) 파일 연산자

연산자 사용법 설명
-f if [ -f $변수 ] 변수 유형이 파일이면 참
-L if [ -L $변수 ] 변수 유형이 파일이면서 심볼릭 링크 이면 참
-r if [ -r $변수 ] 변수 유형이 파일이거나 디렉토리이면서 읽기 권한이 있으면 참
-w if [ -w $변수 ] 변수 유형이 파일이거나 디렉토리이면서 쓰기 권한이 있으면 참
-x if [ -x $변수 ] 변수 유형이 파일이거나 디렉토리이면서 실행 권한이 있으면 참
-s if [ -s $변수 ] 변수 유형이 파일이거나 디렉토리이면서 사이즈가 0보다 크면 참
-O if [ -O $변수 ] 변수 유형이 파일이거나 디렉토리이면서 스크립트 실행 소유자와 동일하면 참
-G if [ -G $변수 ] 변수 유형이 파일이거나 디렉토리이면서 스크립트 실행 그룹과 동일하면 참
[team01@test1 stest]$ ls -l /etc/localtime
lrwxrwxrwx. 1 root root 32 Dec 31  2020 /etc/localtime -> ../usr/share/zoneinfo/Asia/Seoul
[team01@test1 stest]$ ls -l /usr/share/zoneinfo/Asia/Seoul
-rw-r--r--. 2 root root 659 Oct 27  2020 /usr/share/zoneinfo/Asia/Seoul
[team01@test1 stest]$ FILE=/etc/localtime
[team01@test1 stest]$ if [ -r $FILE ]; then echo True; else echo False; fi
True
[team01@test1 stest]$ if [ -w $FILE ]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [ -x $FILE ]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [ -s $FILE ]; then echo True; else echo False; fi
True
[team01@test1 stest]$ if [ -O $FILE ]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [ -G $FILE ]; then echo True; else echo False; fi
False
[team01@test1 stest]$ su -
Password:
[root@test1 ~]# if [ -O $FILE ]; then echo True; else echo False; fi
True
[root@test1 ~]# if [ -G $FILE ]; then echo True; else echo False; fi
True

7) 파일 비교 연산자

연산자 사용법 설명
-nt if [ $변수1 -nt $변수2 ] 변수 유형이 파일이면서, 변수1이 변수2 보다 최신 파일이면 참
-ot if [ $변수1 -ot $변수2 ] 변수 유형이 파일이면서, 변수1이 변수2 보다 이전 파일이면 참
-ef if [ $변수1 -ef $변수2 ] 변수 유형이 파일이면서, 변수1이 변수2가 동일 파일이면 참
[team01@test1 stest]$ echo "AAA" > first.txt
[team01@test1 stest]$ echo "BBB" > second.txt
[team01@test1 stest]$ FILE1=first.txt; FILE2=second.txt
[team01@test1 stest]$ if [ $FILE1 -nt $FILE2 ]; then echo True; else echo False; fi
False
[team01@test1 stest]$ if [ $FILE1 -ot $FILE2 ]; then echo True; else echo False; fi
True
[team01@test1 stest]$ FILE1=/etc/localtime
[team01@test1 stest]$ FILE2=/usr/share/zoneinfo/Asia/Seoul
[team01@test1 stest]$ if [ $FILE1 -ef $FILE2 ]; then echo True; else echo False; fi
True

 

 

 

정규 표현식

1) posix 기본 및 확장 문법

메타문자 설명
. 뉴라인을 제외한 한 개의 문자와 일치함
? 자신 앞에 나오는 정규 표현식이 없거나 하나가 일치하고, 대부분 한개의 문자와 매칭할때 사용함
* 바로 앞 문자열이나 정규 표현식에서 한번 이상 반복되는 문자를 의미
+ 자신 앞에 나오는 하나 이상의 정규 표현식과 일치함 *과비슷한 동작을 하지만 반드시 하나이상일 경우에만일치
{N} 정확히 N번 일치함
{N,} N번 또는 그 이상 일치함
{N,M} 적어도 N번 일치하지만, M번 일치를 넘지 않아야 함
- A부터Z를 A-Z로 표현 하듯 알파벳이나 숫자의 범위를 나타낼때 사용
^ 라인의 시작에서 공백 문자열을 의미 또는 목록의 범위에 없는 문자들을 의미함
$ 라인 마지막에서 공백 문자열을 의미
^$ 빈줄과 일치
[...] 대괄호는 단일 정규 표현식에서 문자들을 집합으로 묶어줌
\ 특수 문자를 원래의 문자 의미대로 해석
\b 단어 끝의 공백 문자열의 의미
\B 라인 끝의 공백 문자열을 의미
\< 단어 시작에서 공백 문자열을 의미
\> 단어 끝에서 공백 문자열을 의미

 

2) POSIX 문자 클래스

POSIX 설명
[:alnum] 알파벳이나 숫자로 이루어진 문자열로 [A-Za-z0-9]와 같은표현임
[:alpha:] 알파벳 문자를 의미하며, [A-Za-z]와 같은 표현임
[:blank:] 스페이스나 탭을 의미
[:cntrl:] 제어문자들을 의미
[:digit:] 0~9사이의 숫자를 의미, [0-9]와 같은 표현
[:graph:] 출력가능한 그래픽 문자들로, 아스키 33 ~ 126 사이의 문자들과 일치, 스페이스 및 제어 문자들을 제외한 [:print:]와 같음
[:lower:] 알파벳 소문자를 의미하며 [a-z]와 같은 표현
[:print:] 출력 가능한 문자들로 아스키 33~126 사이의 문자들과 일치함, [:graph:]와 비슷하지만 스페이스 문자를 포함
[:punct:] 문장 부호 문자들을 의미
[:space:] 뉴라인 줄 바꿈, 스페이스, 탭과 같은 모든 공백 문자들을 의미
[:upper:] 알파벳 대문자를 의미, [A-Z]와 같은 표현
[:xdigit:] 16진수의 숫자와 문자를 의미, [0-9a-fA-F]와 같은 표현

 

[team01@test1 stest]$ cat expression.txt
====================
 Regular Expression
====================

#===========================================#
# Date: 2020-05-05
# Author: xxx
# Description: regular expression test file
#===========================================#


Today is 05-May-2020.
Current time is 6:04PM.
This is an example file for testing regular expressions.        This example file includes control characters.

# System Information
CPU model is Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz
Memory size is 32GiB
Disk is 512 GB
IP Address is 1.1.1.1

# Help
Do you have any questions? or Do you need any help?
If you have any questions, Please send a mail to the email below.

# Contacts
e-mail: xxx@gmail.com
phone: 010-2222-1111

[team01@test1 stest]$ grep 'C.U' expression.txt
CPU model is Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz
[team01@test1 stest]$ grep 'C..e' expression.txt
CPU model is Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz

 

 

grep과 함께 쓰일때는 [[ ]]를 중첩해서 사용함

//q로 시작하며 ? 로 끝나는 단어야 하고, q와 ? 사이 영문소문자인 단어

[team01@test1 stest]$ grep -E 'q[[:lower:]]*\?' expression.txt
Do you have any questions? or Do you need any help?

//q로 시작하며?로 끝나거나 그외 한문자로 끝나는 단어야 하며 q와 ?사이는 영문소문자인 단어
[team01@test1 stest]$ grep -E 'q[[:lower:]]*\??' expression.txt
Do you have any questions? or Do you need any help?
If you have any questions, Please send a mail to the email below.

 

//-2로 시작해서-로 끝나며2가 계속 반복되는 단어

[team01@test1 stest]$ grep -E '\-2+\-' expression.txt
phone: 010-2222-5668

//앞쪽에서 #으로 시작되는 라인

[team01@test1 stest]$ grep '^#' expression.txt
#===========================================#
# Date: 2020-05-05
# Author: xxx
# Description: regular expression test file
#===========================================#
# System Information
# Help
# Contacts

 

//라인 앞에서 알파벳으로 5글자로 시작하며, 알파벳 뒤에 : 로 끝나는 단어

[team01@test1 stest]$ grep -E '^[[:alpha:]]{5}:' expression.txt
phone: 010-2222-5668

//라인 앞에서 알파벳으로 5글자이상이며, 뒤에 공백을 가진 단어가 있는 라인
[team01@test1 stest]$ grep -E '^[[:alpha:]]{5,}[[:space:]]' expression.txt
Today is 05-May-2020.
Current time is 6:04PM.
Memory size is 32GiB

 

//{N,M} 으로 라인 종료  시 4글자 이상, 6글자 이하인 단어가 있는 라인

[team01@test1 stest]$ grep -E '[[:alpha:]]{4,6}$' expression.txt
 Regular Expression

# Description: regular expression test file
# System Information
Help
# Contacts

라인 끝에 숫자4글자 이상 6글자 이하인 단어가 있는 라인
[team01@test1 stest]$ grep -E '[[:digit:]]{4,6}.$' expression.txt
Today is 05-May-2020.

 

 

// ^$ : 시작과 끝

//grep -v 옵션으로 주석과 공백을 제외한 라인만 볼 경우에 사용

//라인 앞에서 #로 시작하고 , 공백인 라인 제거

[team01@test1 stest]$ cat expression.txt | grep -v '^#' | grep -v '^$'
====================
 Regular Expression
====================

Today is 05-May-2020.
Current time is 6:04PM.
This is an example file for testing regular expressions.        This example file includes control characters.
CPU model is Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz
Memory size is 32GiB
Disk is 512 GB
IP Address is 1.1.1.1
Do you have any questions? or Do you need any help?
If you have any questions, Please send a mail to the email below.
e-mail: xxx@gmail.com
phone: 010-2222-1111

 

// . 으로 끝나는 단어가 있는 라인

[team01@test1 stest]$ grep '\.\b' expression.txt
CPU model is Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz
IP Address is 1.1.1.1
e-mail: nalee999@gmail.com

// . 가 있는 라인
[team01@test1 stest]$ ip address show | grep '\.'
    inet 127.0.0.1/8 scope host lo
    inet 1.1.1.1/24 brd 1.1.1.255 scope global noprefixroute ens161351
    inet 1.1.2.2/24 brd 1.1.2.255 scope global noprefixroute ens256326
    inet 1.1.3.3/24 brd 1.1.3.255 scope global virbr0

// . 으로 끝나는 라인

[team01@test1 stest]$ grep '\.\B' expression.txt
Today is 05-May-2020.
Current time is 6:04PM.
This is an example file for testing regular expressions       This example file includes control characters.
If you have any questions, Please send a mail to the email below.

// C로 시작하는 단어가 있는 라인

[team01@test1 stest]$ grep '\<C' expression.txt
Current time is 6:04PM.
CPU model is Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz
Contacts

 

// \< 단어의 시작, \> 단어의 끝

//n으로 끝나는 단어가 있는 라인

[team01@test1 stest]$ grep 'n\>' expression.txt
 Regular Expression
# Description: regular expression test file
This is an example file for testing regular expressions.        This example file includes control characters.
# System Information

 

//특수문자가 포함된 라인 , expressions와this 사이 tab문자가 있음

[team01@test1 stest]$ grep '[[:cntrl:]]' expression.txt
This is an example file for testing regular expressions.        This example file includes control characters.

//[:graph:]는 스페이스를 제외한 아스키 코드가 있는 모든 라인, 위에서 10번째 줄 까지
[team01@test1 stest]$ grep '[[:graph:]]' expression.txt | head -n 10
====================
 Regular Expression
====================
#===========================================#
# Date: 2020-05-05
# Author: xxx
# Description: regular expression test file
#===========================================#
Today is 05-May-2020.
Current time is 6:04PM.

 

// [:print:]는 스페이스를 포함한 아스키 코드가 있는 모든 라인
[team01@test1 stest]$ grep '[[:print:]]' expression.txt | head -n 10
====================
 Regular Expression
====================

#===========================================#
# Date: 2020-05-05
# Author: xxx
# Description: regular expression test file
#===========================================#
Today is 05-May-2020.

 

//[:punct:]는 문장부호를 의미, 즉, " , . , ? : " 이런것들(점, 물음표, 쉼표 등)을 의미 

[team01@test1 stest]$ grep -E '[[:alpha:]]{6,}[[:punct:]]' expression.txt
Author: xxx
Description: regular expression test file
This is an example file for testing regular expressions.        This example file includes control characters.
Do you have any questions? or Do you need any help?
If you have any questions, Please send a mail to the email below.

//[:xdigit:] 는 16진수에 해당하는 문자들만 허용, 

//16진수 2글자로 시작하며, 16진수 2글자로 끝나는 단어가 있는 라인

[team01@test1 stest]$ ip a | grep -E '\<[[:xdigit:]]{2}:*:[[:xdigit:]]{2}\>'
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    link/ether 11:01:21:0d:da:aa brd ff:ff:ff:ff:ff:ff
    link/ether 11:01:21:0d:da:aa brd ff:ff:ff:ff:ff:ff
  

'shell_script' 카테고리의 다른 글

shell 기본 sed  (0) 2021.07.30
shell 기본 awk  (0) 2021.07.29
shell 기본 find  (0) 2021.07.29
shell 기본 grep  (0) 2021.07.27
shell 명령어  (0) 2021.07.26