728x90

연습문제 1. grade.sh [if문 활용]

 

학생의 시험 성적을 입력 받아서 학점을 계산하는 스크립트를 작성하세요.

 

학점은 점수가

96~100 : A+

90~95 : A- 

86~89 : B+

80~85 : B-

76~79 : C+

70~75 : C-

66~69 : D

나머지는 F로 계산

그리고 100점이 넘는 점수는 So Big 메시지를 출력,

1점보다 적은 값이 들어오면 So small 이라는 메시지를 출력하고 스크립트를 종료하게 작성하시오.

 

[if문 활용]

[case 문 활용]

 

 

[while문 활용]

 

[for문 활용]

 

728x90
728x90

/etc/nginx/

ㄴ 엔진엑스 서버가 사용하는 기본 설정이 저장된 루트 디렉터리이다.

이곳에 저장된 설정 파일의 내용에 따라 동작한다.

 

/etc/nginx/nginx.conf

ㄴ 엔진엑스의 기본 설정 파일로, 모든 설정에 대한 진입점입니다.

워커 프로세스 개수, 튜닝, 동적 모듈 적재 , 다른 엔진엑스 세부 설정파일에 대한 참조를 지정합니다.

 

/etc/nginx/conf.d/

ㄴ 기본 HTTP 설정 파일을 포함합니다. 디렉터리 내 파일 중 이름이 .conf로 끝나는 파일은 앞서 언급한

/etc/nginx/nginx.conf 파일이 가진 최상위 http블록에 포함됩니다. 

 

엔진엑스 설정은 inclue 구문을 활용해 구조화함으로써 각 설정 파일을 간결하게 유지하면 좋습니다.

 

몇몇 패키지 저장소에서 배포되는 엔진엑스는 설치 시 conf.d 디렉터리 대신 site-enabled 디렉터리가 있고,

symlink를 통해 site-available 디레겉리에 저장된 설정 파일들이 연결돼 있을 수 있습니다.

하지만 이 방식은 더는 사용되지 않습니다.

 

/var/log/nginx

ㄴ 엔진엑스 로그가 저장되는 디렉터리로, access.log와 error.log 파일이 있습니다.

 

접근 로그 파일은 엔진엑스 서버가 수신한 개별요청에 대한 로그를 저장하며,

오류 로그 파일은 오류 발생 시 이벤트 내용을 저장합니다.

 

엔진엑스 설정을 통해 debug 모듈을 활성화했다면 디버그 정보도 오류 로그 파일에 기록됩니다.

 

-----------------------------------------------------------------------------------------------------------------------------------

 

[nginx 명령어]

 

nginx -h

ㄴ 엔진엑스 도움말을 살펴봅니다.

 

nginx -v

ㄴ 엔진엑스 버전 정보를 확인합니다.

 

nginx -V

ㄴ 엔진엑스 버전 정보 뿐 아니라 빌드 정보를 보여줍니다. 또한 엔진엑스 바이너리에 포함된 모듈을 보여주는 설정 인숫값을 확인합니다.

 

nginx -T

ㄴ 엔진엑스 설정을 시험하고 결과를 화면에 보여줍니다. 기술 지원이 필요할 때 유용합니다.

 

nginx -s signal ( stop, quit, reload, reopen )

ㄴ stop 엔진엑스 프로세스 동작을 즉시 멈추게합니다.

    quit 현재 진행중인 요청을 모두 처리한 뒤 엔진엑스 프로세스 종료를 합니다.

    reload 엔진 엑스가 설정을 다시 읽어들이게 합니다.

    reopen 지정된 로그파일을 다시 열도록 합니다.

 

 

728x90
728x90

 

nginx 설치

yum 저장소에서는 nginx가 없기때문에 외부 저장소를 추가해주어야 한다.

 

1. cd /etc/yum.repos.d/에서 nginx.repo 파일을 생성 후 다음 내용을 입력한다.

 

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/

gpgcheck=0

enabled=1

 

baseurl에서 OS와 OSRELEASE의 경우 리눅스 배포판과 버전에 따라 기입해준다.

ex) baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/

 

2. 파일 작성을 완료했으면 nginx를 설치한다.

 

yum -y install nginx

systemctl enable nginx

systemctl start nginx

firewall-cmd --permanent --zone=public --add-port=80/tcp

firewall-cmd --reload

 

---------------------------------------------------------------------------------------------------------------------------------

nginx 설치 상태 점검

 

버전확인

nginx -v 

 

엔진엑스 동작확인

ps -ef | grep nginx

 

nginx가 정상적으로 실행중이라면 두 프로세스가 master와 worker로 표기되어있음

 

nginx index 페이지 실행

curl localhost

 

문제가 없이 잘 실행되었다면 기본 HTML 사이트인 엔진엑스 환영페이지가 뜰것이다.

 

 

 

 

728x90
728x90

sed 명령어는 찾은 문자열을 바꿀수 있는 명령어이다.

 

[sed 스크립트]

 

sed 스크립트는 어떤 범위의 어떤 문자열이 포함된 라인을 추출하던지

특정 문자열을 원하는 다른 문자열로 변경할 것인지를 명시하는일입니다.

 

여기서 어떤 범위는 어드레스 address 에 해당하며,

특정 문자열을 추출하거나 변경하는 일 명령어 command 라고합니다.

 

어드레스는 옵션처럼 생략될 수도 있으며,

어드레스가 생략되면 sed는 대상 파일 전체에서 특정 문자열을 찾고 변경합니다.

 

[어드레스]

 

어드레스는 대상 파일에서 어떤 범위에 해당합니다. 그리고,

어드레스가 정의되지 않았을 경우에는

대상 파일 전체에서 특정 문자열을 찾거나 명령어를 수행합니다.

 

어드레스는 특정 라인일수도 있고, 정규 표현식과 같은 패턴일수도 있습니다.

 

"특정 라인부터 특정 패턴이 포함된 라인까지이거나"

"특정 패턴이 포함된 라인부터 명시한 라인 수 까지" 일수도 있습니다.

 

다음은 이런 어드레스 종류를 정리한 것입니다.

옵션 설명
number 명시된 숫자에 해당하는 라인 번호일 경우 다음 명령어를 수행함
number~step 명시된 숫자는 해당하는 라인부터 명시한 단계만큼 해당 라인을 스킵한 다음
라인일 경우 다음 명령어를 수행함
$ 파일의 마지막 라인일 경우 다음 명령어를 수행함
/regexp/ 명시한 정규표현식과 일치하는 라인일 경우 다음 명령어를 수행함
\cregexpc 명시한 정규 표현식과 일치하는 라인일 경우 다음 명령어를 수행함
0,addr2 1번째 라인부터 addr2가 포함된 라인까지가 범위이며, addr2는 정규 표현식이여함
addr1,+N addr1이 포함된 라인부터 +N라인까지가 범위이며, addr1은 정규 표현식이여야 하며,
N은 숫자여야함
addr1,~N addr1이 포함된 라인을 기준으로 N라인까지가 범위이며, addr1은 정규 표현식이여야 하며,
N은 숫자여야함

# sed 테스트를 위한 샘플 파일 내용

cat hosts

 

# This is Sed Sample File
# We will test to replace from a-text to b-text.
# It was created by NaleeJang.

127.0.0.1   localhost

# Development
192.168.100.250 git.example.com
192.168.100.10  servera.example.com
192.168.100.11  dev.example.com

# Test

172.10.2.12 test1.example.com
172.10.2.13 test2.example.com

# Production
122.10.10.31 service.example.com
122.10.10.32 service1.example.com
122.10.10.33 service2.example.com

 

---------------------------------------------------------------------------------------------------------

옵션 -n : 대상 파일 내용을 출력하지않겠다.

숫자 5 : 대상 파일의 5번째 라인

p : print의 약자로 현재 어드레스에 의해 정의된 범위의 내용을 출력하라는 의미

 

# 5번째 줄을 출력함

sed -n '5 p' hosts

ㄴ 127.0.0.1 localhost

 

'1~3' : 1번째 라인부터 시작하여 3칸 라인을 건너뛰고 다음 라인을 읽으라는 뜻

= : 현재 읽어들인 라인의 라인 번호를 출력하라

# 1번째 라인부터 시작하여 3라인마다 해당 라인 번호 출력

sed -n '1~3 =' hosts

 

$ : 파일의 마지막 라인

'$ =' : 마지막 라인의 라인번호를 출력하라

'$ p' : 마지막 라인의 내용을 출력하라

 

# 파일의 마지막 라인 번호 출력

sed -n '$ =' hosts

 

# 파일의 마지막 라인 문자열 출력

sed -n '$ p' hosts

 

# test와 숫자로 시작하는 문자열이 포함된 라인 출력

sed -n '/test[0-9].*/ p' hosts

 

\cregexpc : 명시한 정규표현식과 일치하는 라인일 경우 다음 명령어를 수행

정규표현식을 \c ~ c 사이에 표현

sed -n '\ctest[0-9].*c p' hosts

 

어드레스 0,addr2 : 첫 번째 라인부터 addr2가 포함된 라인까지 대상범위가 됨

 

#1번째 라인부터 # Devel로 시작하는 문자열이 있는 라인까지 출력

sed -n '0,/^# Devel*/ p' hosts

 

# Devel로 시작하는 라인부터 아래 3줄까지 출력

sed -n '/^# Devel*/,+3 p' hosts

 

# Devel이 포함된 라인을 기준으로 3번째 라인까지 출력

sed -n '/^# Devel*/,~3 p' hosts

 

[ 명령어 ]

 

sed 명령어에는 어드레스를 필요로 하지 않거나,

숫자나 정규 표현식과 같은 단일 어드레스를 사용할 때 사용할 수 있는 명령어와

어드레스 범위를 허용하는 명령어들이 있습니다.

 

어드레스를 필요로 하지 않는 명령어는 라벨, 주석, 블록이 있으며,

단일 어드레스를 사용할 수 있는 명령어와 어드레스 범위를 허용하는

명령어에는 주로 문자열 추가, 삭제, 변경, 파일 저장과 같은 명령어들이 있습니다.

 

그럼 지금부터 sed와 함께 사용할 수 있는 다양한 명령어들을 알아보겠습니다.

 

0 or 1 어드레스 명령어( Zero- or One- address commands )

어드레스 범위 명령여( Commands which accept address ranges )

 

( 0 or 1 어드레스 명령어 )

 

0 어드레스 명령어에는 라벨, 주석, 블록과 같이 파일 내용에 아무런 영향을 주지 않는

명령어와 문자열 추가, 삽입, 스크립트 종료, 파일 내용 추가와 같은

명령어들로 어드레스가 필요한 명령어가 있습니다.

 

다음은 이런 명령어들을 정리한 것입니다.

 

옵션 설명
:label 라벨
#comment 주석
{ ... } 블록
= 현재 라인번호 출력
a \ text 문자열 추가
i \ text 문자열 삽입
q sed 스크립트 실행 종료
Q sed 스크립트 실행 종료
r 파일명 파일 내용 추가
R 파일명 파일의 첫 라인 추가

 

/# Test/,+3 은 어드레스 범위로 # Test가 포함된 라인부터 3번째 라인까지가 대상범위이며,

해당 범위 명령어들을 중괄호{}로 블록화하였음

현재라인번호를 출력하는 = 명령어

#으로 시작하는 주석

콜론:으로 시작하는 라벨이 있습니다.

 

# Test로 시작하는 라인부터 +3라인까지의 라인 번호 출력

 

cat sed-script.txt

/# Test/,+3 {

=

# first label

:label1

}

 

# 파일을 이용하여 sed 실행

 

sed -n -f sed-script.txt hosts

 

명령어 a \text는 해당 어드레스 다음 라인에 명시한 문자열을 추가합니다.

다음 예제는 172.10.2.13이 있는 라인 다음에 172.10.2.14 test3.example.com을 추가한 후 출력하는 예입니다.

sed에서 사용되는 명령어들은 한 라인에 한 명령어만 사용할 수 있습니다. 따라서

여러 줄의 명령어를 사용하려면 다음 예제와 같이 중괄호{}로 블록을 만들어주어야 합니다.

 

# 172.10.2.13 이 있는 다음 라인에 새 주소 172.10.2.14 추가

sed -n '/172.10.2.13/ { a \

172.10.2.14 test3.example.com

p }' hosts

 

i \text 명령어는 앞서 살펴보면 a \text와 유사하지만, 해당 어드레스 이전 라인에 명시한 문자열을 삽입합니다.

다음 에제는 172.10.13이 있는 라인 위에 172.10.2.14 test3.example.com을 삽입하고 수정된 내용을 출력합니다.

 

# 172.10.2.3 에 있는 라인 위에 새 주소 172.10.2.14 추가

 

sed -n '/172.10.2.3/ { i \

172.10.2.14 test3.example.com

p }' hosts

 

( q 명령어를 사용할 경우 )

q는 수행 중이던 스크립트를 종료할 때 사용하는 명령어입니다.

다음 예제를 보면 a 명령어에 의해 추가할 17.10.2.14 test3.example.com을 추가하지 않은채

추가할 테스트만 출력하고 sed 실행을 종료합니다.

 

# test3.example.com을 출력하지 않고 종료

sed -n '/172.10.2.13/ { a \

172.10.2.14 test3.exmaple.com

q

p } ' hosts

 

( Q 명령어를 사용할 경우 )

앞서 살펴본 예제에서 추가할 텍스트만 출력하고 sed 실행을 종료했다면, Q 명령어는 출력조차하지 않고

바로 sed 수행을 종료합니다.

 

# 아무것도 출력하지 않고 종료

sed -n '/172.10.2.13/ { a \

172.10.2.14 test3example.com

Q

p }' hosts

 

( r 파일명 명령어를 사용할 경우 )

r 파일명 명령어는 앞에서 명시한 해당 어드레스 뒤에 명시한 파일로부터 해당 내용을 읽어 해당 내용을 추가합니다.

 

다음 예제에서는 추가할 IP 주소와 호스트명을 sed-read.txt에 저장합니다.

 

그리고, sed를 이용해 단일 어드레스인 172.10.2.13 뒤에

r sed-read.txt를 선언하고 해당 내용을 출력하도록 하였습니다.

 

cat sed-read.txt

172.10.2.14 test3.example.com

172.10.2.15 test4.example.com

 

# 172.10.2.13 라인 뒤에 파일에 모든 새 IP 추가

sed -n '/172.10.2.13/ { r sed-read.txt

p }' hosts

 

( R 파일명 명령어를 사용할 경우 )

R 파일명 명령어는 r 파일명과는 다르게 해당 파일의 첫 번째 라인만 읽어 추가합니다. 다음 예제를 보면, 앞서 살펴본 예제와 동일하지만 명령어가 r에서 R로 바뀜으로 인해 해당 파일의 첫번째 라인인 172.10.2.14 test3.example.com만 추가된 것을 확인할 수 있습니다.

 

# 172.10.2.13 라인 뒤에 파일의 첫 번째 새 IP만 추가

sed -n '/172.10.2.13/ { R sed-read.txt

p }' hosts

 

[ 어드레스 범위 명령어 ]

 

어드레스 범위는 특정 라인부터 특정 라인까지를 의미하며,

이런 어드레스를 허용하는 명령어들에는 문자열 변경, 삭제, 출력, 라벨 분기와 같은 명령어들이 있습니다.

 

다음은 어드레스 범위 명령어 (Commands which accept address ranges)를 정리한 것입니다.

 

옵션 설명
b label 라벨을 호출함
c \ text 앞에서 명시된 패턴이 포함된 라인을 text 문자열로 변경
d D 앞에서 명시된 패턴 삭제
h H 패턴 공간을 홀드 공간에 복사/추가
g G 홀드 공간을 패턴 공간에 복사/추가
I 입력된 데이터의 현재 라인 출력
I width 명시한 너비에 맞게 입력된 데이터의 현재 라인 출력
n N 입력된 데이터의 다음 라인을 복사/추가
p P 현재 패턴 공간 출력
s/regexp/replacement/ 정규 표현식(regexp)에 해당하는 데이터를 그 다음 오는 데이터(replacement)로 변경함
t label / T label 앞에서 선언된 명령어를 실행 후 라벨로 분기
w 파일명 / W 파일명 명시한 파일에 현재 패턴 공간을 저장함
x 홀드와 패턴  공간의 콘텐츠를 교환함
y/source/dest/ 패턴이 포함된 라인의 문자열(source)를 dest 문자열로 변경

( b label 명령어를 사용할 경우 )

 

명령어 b label은 sed 명령어를 수행하거나 b label을 만나면 해당 라벨로 분기를 수행합니다.

 

다음 예제의 sed-script1.txt를 보면 # Test가 포함된 라인부터 3줄까지가 어드레스인 범위이며, 중괄호{} 사이의

블록에는 읽어들인 라인에 값이 없을 경우 다음 명령어인 문자열 변경을 수행하지 말고, label1이라는 라벨로 분기하라는 내용입니다.

 

이와 같이 sed 수행이 불필요한 경우 label을 통해 sed 수행을 분기할 수 있습니다.

이렇게 생성된 파일을 이용하여 sed를 수행하면 다음과 같이 Test나 test가 dev로 변경된 것을 확인할 수 있습니다.

 

cat sed-script1.txt

 

/# Test/,+3  {

# if input line is empty, doesn't execute replacing

/^#/ b label1

s/[tT]est/dev/

: label 1

p

}

 

# 스크립트 수행 결과 test가 dev로 변경되었음

sed -n -f sed-script1.txt hosts

 

 

 

 

# c \text 명령어를 사용할 경우

 

c \text 명령어는 앞에서 명시한 어드레스가 포함된 라인을 명시한 text로 변경하라는 의미입니다.

 

다음 예제를 보면 service.e로 시작되는 문자열이 포함된 라인을

122.10.10.30 vip.service.example.com으로 내용을변경하였음을 확인할 수 있습니다.

 

sed 명령어 다음에 사용된 tail 명령어는 파일 내용이 길어 해당 내용을 마지막 4라인만 확인하기 위해 사용되었습니다.

 

# service.e 가 있는 라인의 값을 변경

sed '/service.e/ c \122.10.10.30 vip.service.example.com' hosts | tail -n4

 

# d와 D 명령어를 사용할 경우

 

명령어 d와 D는 앞에서 명시한 어드레스에 해당하는 문자열이 포함된 라인을 삭제합니다.

 

이때, d 명령어는 뉴라인과 상관없이 해당 문자열이 포함된 라인을 삭제하며, D 명령어는 패턴 공간의 뉴라인을 인식하여 해당 뉴라인까지만 삭제합니다. 예제를 통해 다시 한번 더 설명하겠습니다.

 

다음 첫 번째 예제는 hosts의 문자열 중 We Will test to replace를 We will test to와 replace 사이에 뉴라인 \n을 추가하여 문자열 변경을 하였습니다. 그리고, text 포함된 라인을 삭제한 후 편집 내용을 출력해 보면 We Will로 시작하는 라인이 모두 사라진 것을 확인 할 수 있습니다. 이와 반대로 D 명령어를 사용한 두 번째 예제를 보면 We will test to까지만 삭제하고, 나머지 문자열은 삭제되지 않았음을 알수 있습니다.

 

# 뉴라인 상관없이 test가 포함된 라인삭제

sed -n '0,/NaleeJang/ {
s/We will test to replace/We will test to \nreplace/
/test/ d
p }' hosts

 

# 패턴 공간에 포함된 뉴라인을 인식한 후 test가 포함된 라인 삭제

sed -n '0,/NaleeJang/ {
s/We will test to replace/We will test to \nreplace/
/test/ D
p }' hosts

 

# h와 H 명령어를 사용할 경우

 

명령어 h 또는 H는 이런 홀드 버퍼의 내용을 패턴 버퍼로 복사합니다.

다음 예제는 Production을 Service로 변경한 후

홀드 버퍼의 내용을 패턴 버퍼로 복사하고 패턴 버퍼의 내용을 출력한 것 입니다.

문자열 변경은 패턴 버퍼에서 수행했고, 그 이후 홀드 버퍼를 패턴 버퍼로 복사했기 때문에

패턴 버퍼에서 변경했던 문자열을 원래 문자열로 원복 되었음을 알 수 있습니다.

 

# 홀드 버퍼 복사로 변경한 문자열 정보가 보이지 않음

sed -n '/Product/,+3 {

s/Production/Service/

h

p }' hosts

---------------------------------------------------------------------------------------------------------------------

  • 패턴 스페이스(Pattern space)와 홀드 스페이스(hold space)
  • sed 명령어는 동작시 내부적으로 두개의 워크스페이스를 사용하는데,
    (마치 우리 복사 붙여넣기의 임시 저장소 클립보드와 같다)
    이 두 버퍼를 패턴 스페이스(=패턴 버퍼)와 홀드 스페이스(=홀드 버퍼)라고 합니다.
  • 패턴 버퍼: sed가 파일을 라인단위로 읽을 때 그 읽힌 라인이 저장되는 임시 공간
    우리가 sed명령어로 출력하라는 명령을 주면 여기 있는 버퍼 내용을 출력하는거고,
    뭔가 조작을 하면 여기 저장되어 있는 내용을 조작하는 겁니다. 원본을 건드는게 아닙니다.
    즉 이 버퍼는 현재 내가 담고 있는 정보를 갖고 있겠죠. 텍스트 1라인에서 2라인으로 넘어가 글을 읽게 되면
    여기 패턴 버퍼에는 2라인 현재 내용이 저장되겠죠.
  • 홀드 버퍼 : 홀드 스페이스는 패턴 버퍼처럼 짧은 순간 임시 버퍼가 아니라
    좀 더 오랜 기간 가지고 있는 저장소입니다.
    2라인 작업중이더라도 1라인을 기억하고 있을 수 있는 거예요.
  • 즉, 어떤 내용을 홀드 스페이스에 저장하면,
    sed가 다음 행을 읽더라도 나중에 내가 원할 때 불러와서 재사용할 수 있는 버퍼가 홀드 버퍼가 됩니다.

출처 : https://nasa1515.tech/linux-sed/

---------------------------------------------------------------------------------------------------------------------

# 홀드 버퍼 복사로 변경한 문자열 정보가 보이지 않음

 

sed -n '/Product/,+3 {

s/Production/Service/

h

p }' hosts

 

# I 명령어를 사용할 경우

 

I 명령어는 현재 읽어들인 라인을 출력하는 명령입니다.

다음 예제는 host 파일에서 Product가 포함된 라인부터 아래 3줄까지 입력되는 현재 라인을 출력하는 예입니다.

I 명령어는 패턴 버퍼의 내용을 출력하는 p 명령어와는 다르게 문자의 끝을 알리는 $ 기호와 같은 특수 기호를 함께 출력합니다.

 

# I width 명령어를 사용할 경우

 

I width 명령어는 width는 너비를 의미하는 숫자로, 명시한 숫자만큼 라인의 너비를 보여줍니다.

 

다음 예제는 I 20을 사용하여 해당 내용을 너비 20에 맞추어 보여주고, 나머지 문자열은 다음 라인에 보여줍니다.

 

# 라인 너비를 20 에 맞추어 보여줌

 

sed -n '/Product/,+3 l 20' hosts

 

#n과 N명령어를 사용할 경우

 

# 입력된 라인의 다음 라인을 복사함. 복사후 출력을 했으므로 복사한 값 출력

 

sed -n '/Prodcut/,+3 {

n

p } ' hosts

 

# 복사전 출력을 했으므로 현재 입력된 라인을 출력

 

sed -n '/Product/,+3 {

p

N }' hosts

 

# p와 P 명령어를 사용할 겨웅

 

명령어 p와 P 명령어는 패턴 공간의 내용을 그대로 출력합니다. 이때, 패턴 내용에 편집에 의해 삽입된 뉴라인이 있다면 p는 뉴라인 상관없이 패턴 내용을 그대로 출력하지만, P는 뉴라인 다음 라인은 출력하지 않습니다.

 

아래 첫 번째 예제에서는 p를 사용하여 패턴 공간에 변경된 내용을 그대로 출력하였고, 두 번째 예제에서는 P를 사용하여 뉴라인이 있는 라인의 다음 라인은 출력되지 않았음을 알 수 있습니다.

 

# 소문자 p는 패턴 공간 내용을 그대로 출력

sed -n '0,/NaleeJang/ {

s/We will test to replace/We will test to\nreplace/

p }' hosts

 

# 대문자 P는 패턴 공간을 출력하되, 뉴라인이 있는 라인은 뉴라인까지만 출력

sed -n '0,/NaleeJang/ {

s/We will test to replace/We will test to\nreplace/

P }' hosts

 

#s/regexp/replacement/ 명령어를 사용할 경우

 

s/regexp/replacement/ 명령어는 regexp라는 정규 표현식과 일치하는 문자열을 replacement에서

명시된 문자열로 변경합니다.

 

" sed의 가장 기본적이면서 대표적인 명령어로 가장 많이 사용되는 명령어입니다. "

 

다음 예제는 0번째 라인부터 Nalee라는 문자열이 처음으로 검색된 라인에서 # 문자를 공백으로 변경하는 예제입니다.

 

sed -n '0,/Nalee/ {

s/^# //

p }' hosts

 

-------------------------------------------------------------------------------------------------

 

 

sed 명령어들을 대충 공부하고

쉘스크립트 예제들을 연습하고있던차

 

sed "s/ID_LIKE=//;s/\"//g"

 

sed명령어를 얼추 다 봤는데도

 

/;s/\"/

 

이게 뭔 뜻인지 도통 이해가 안되서 한참을 고민했다.

 

s/찾을문자열/바꿀문자열/g 형태를 쓴거같기는 한데...

 

 

구글링을 한 30분했더니..

 

파일 전체에서 특정 문자를 다른 걸로 바꾸고 싶을 때

sed 's/기존문자/다른문자/;s/기존문자2/다른문자2/'

여러 문자 바꿀 때는 세미콜론으로 구분해서 넣으면됨.

 

라고 sed명령어 한 문장에 2개를 쓰는것때문에 ;가 삽입된거였다.

해석을 해보면 ..

 

ID_LIKE=라는 문자열을 찾아서 // 없애고

첫번째 sed명령어의 마지막이라는 뜻으로 ;

그다음 바로 두번째명령어인 s/"//

" 쌍 따옴표를 찾아서 // 없애라는 뜻의 명령어였다..

 

 

 

 

 

 

 

 

728x90
728x90

wc명령어는

단어 수를 세어주는 명령어입니다.

 

wc 명령어 사용법

wc [옵션] [파일이름]

 

옵션 의미
-c 문자수만 보여준다
-m 캐릭터수만 보여준다
-l 라인수만 보여준다
-w 단어수만 보여준다
-L 가장 긴 문장의 길이를 보여준다.

 

 

728x90
728x90

날짜와 시간을 알려주는 date 명령어는 개발할 때는 물론이고,

시스템의 데이터를 동기화할때,

데이터를 백업할 때 등등 매우 많은 곳에서 사용합니다.

 

그런데, 막상 date를 이용해 내가 원하는 포맷으로 날짜를 출력하고 싶을 때는

어떻게 해야 하는지 잘 모르거나 생각이 나지 않아 인터넷에서 검색하곤 합니다.

 

[ Date 포맷 ]

 

date 포맷은 날짜와 포맷을 내가 원하는 형식으로 출력할 수 있도록 도와줍니다.

 

% 퍼센트 기호와 함께 사용되며 요일, 년, 월, 일, 시, 분, 초 등을 조합하여 원하는 날짜와 시간으로 출력할 수 있습니다.

 

아래 표는

 

런 date의 포맷을 정리한 것으로 다음과 같은 포맷을 사용하면, 다양하게 날짜와 시간을 표현할 수 있습니다.

 

포맷 설명
%% % 기호
%a 로케일 타입의 짧은 요일 (예 : Mon)
%A 로케일 타입의 요일 (예 : Monday)
%b 로케일 타입의 짧은 월 (예 : Jan)
%B 로케일 타입의 월 (예: January)
%c 로케일에 따른 날짜와 시간
(예: Thu Mar 3 23:05:25 2005)
%C 세기 (예 : 21)
%d 일 (예: 01)
%D 날짜 %m/%d/%y
%e 일 %_d와 동일함
%F 날짜(%Y-%m-%d)
%g 2 자리수 연도
%G 4 자리수 연도
%N 나노초(000000000..999999999)
%p 로케일 타입의 AM 또는 PM
%P %p와 동일하며, 소문자임
%r 로케일 타입의 시(예: 11:11:04 PM)
%R 24시간 기준의 시와 분, %H:%M과 동일
%s %UTC 타입의 초
%S 초 (00..60)
%t
%T 시간(%H:%M:%S)
%u 요일(1..7); 1은 월요일임
%U 일요일로 시작하는 연도의 주수 (00..53)
%V 월요일로 시작하는 연도의 주수 (01..53)
%w 주별 일수 (0..6); 0은 일요일임
%W 월요일로 시작하는 연도별 주수(00..53)
%h %b와 동일함
%H 시(00..23)
%I 시(01..12)
%j 일(001..366)
%k 시(0..23), %_H와 동일함
%l 시( 1..12 ), %_l와 동일함
%m 월(01..12)
%M 분(00..59)
%n 뉴라인
%x 로케일 타입의 날짜(예: 12/31/99)
%X 로케일 타입의 시간(예: 23/13:48)
%y 연도(00..99)
%Y 연도
%z 타임존(예: +0900)
%:z 타임존(예: +09:00)
%::z 타임존(예: +09:00:00)
%:::z 타임존(예: +09, +05:30)
%Z 타임존(예: KST)

 

다음은 위의 포맷을 활용한 예제를 알아보자.

 

#년-월-일 형태의 날짜 표현

date +%Y-%m-%d

ㄴ 2022-01-20

 

# 월-일-년(00) 형태의 날짜 표현

date +%m-%d-%y

ㄴ 01-20-22 %y(2자리수 연도)

 

# 일-영문월-년 형식의 날짜 표현

date +%d-%b-%Y

ㄴ 11-Jun-2020

 

# 12시간 기준의 시:분:초 AM/PM 형식의 시간 표현

date '+%Y-%m-%d %l:%M:%S %p'

ㄴ 12:39:04 PM

 

# 24시간 기준의 시:분:초 시간 표현

date '+%k:%M:%S'

ㄴ 12:40:43

 

# 년-월-일 시:분:초 AM/PM 형식의 날짜 표현

date '%Y-%m-%d %l:%M: %p'

ㄴ 2022-01-20 11:43 AM

 

# 년-월-일 시:분:초 타임존 시간차 형식의 날짜 표현

date '+%Y-%m-%d %k:%M: %Z %:z'

ㄴ 2022-01-20 11:17 KST +09:00

 

# 요일, 월, 일, 년 형식의 날짜 표현

date '+%A, %B %d,%Y'

ㄴ Thursday, June 11, 2020

 

# 요일, 월 일,년 at 시:분:초 AM/PM 형식의 날짜 표현

date '+%A, %B %d, %Y at %H:%M:%S %p'

ㄴ Thursday, January 20, 2022 at 11:28:12 AM

 

# 년월일시분초 형식의 날짜 표현

date +%Y%m%d%H%M%S

ㄴ 20220120113340

 

# 이번 주는 올해의 몇 번째 주일까?

echo "This week is the $(date +%V)th week of the year."

ㄴ This week is the 03th week of the year.

 

# 오늘은 몇 번째 요일일까?

echo "Today is the $(date +%u)th day of the week."

Today is the 4th day of the week.

 

728x90

+ Recent posts