본문 바로가기
코딩공부/etc..

day 03 shell01

by 달빗슈 2020. 5. 27.

 

ex01 print_groups

 

1. groups $FT_USER | sed 's/ /,/g'

2. id -Gn


★틀린 이유

tr -d '\n' : 개행 지우기


1. sed 사용법

sed (stream editor) : 그래픽 인터페이스가 없는 명령행 유틸리티임 그래서 많은 편집 작업을 일괄적! 으로 처리하기에 아주! 적합한 도구이다.

sed는 파일을 한행씩 처리하고 현재 작업중인 라인을 패턴스페이스란 곳에 저장함

 

# 사용 문법

sed 'command' [filename]

sed s/regular_expression/replacement_String/flags input_file

ex) sed s/file_nmae/file_name/ > filename.txt

 ​ 

# sed 명령어들

d : 행 삭제

h : 패턴스페이스 내용을 홀드스페이스로 복사

H : 패턴스페이스 내용을 홀드스파이스로 추가

g : 홀드스페이스 내용을 패턴스페이스에 복사

G : 홀드스페이스 내용을 패턴스페이스에 추가

p : 행을 출력함

n : 다음입력

q : sed 종료

r : 파일로 부터 행을 읽어 온다

! : 선택된 행을 제외한 나머지 전체 행에 명령어를 적용

s : 문자열을 치환함

 

** s - 검색 & 치환

s는 검색과 치환을 수행한다는 뜻이다. 슬래시(/)로 검색하고 치환할 정규 표현식을 지정한다.

ex) sed s/filename/filename.txt/ filename.txt

filename.txt에 있는 filename이란 스트링을 filename.txt로 치환한다.

 

** \ -역슬래시

역슬래시(\)는 이스케이프 문자라고 부르는데 \다음에 오는 문자는 정규표현식으로 해석하지 않는다. 결국 스트링에 특수기호가 포함되어 있을때 \를 사용한다.

ex) sed s/\$FL/\$FILELIST/ filename.txt

 

** 한행에 여러번 나오는 문자열 교체하기 (flag : g)

sed는 행단위 편집기로, 행을 한번에 하나씩 메모리로 읽은 후 한단위로 처리한다.

sed를 실행할 때는 이 사실을 명심해야한다. 모든 명령행 옵션도 이러한 설계 철학에 기반을 두기 때문이다.

기본적으로 행마다 sed 명령을 새롭게 적용한다고 이해하면 되겠다

그래서 한줄에 같은 단어가 2개 이상 있다면 하나만 바뀌고 끝난다.

 

filename : prj.txt

project : aaa.prj, project : aaa

project : ok

위에 내용에서 project를 project_name로 바꾸고 싶다면

 

sed s/project/project_name/ prj.txt

그러나!! 두번째 둘의 콤마(,)뒤의 project는 바뀌지 않은것을 볼수 있을 것이다.

그래서 다음과 같이 g flag(global)를 이용한다.

sed s/project/project_name/g prj.txt

 

 

** 선행검색

s앞에 /string/을 사용하면 선행검색이 가능하다

ex) sed /okplayers/s/players :/artist :/ playerlists.txt

okplayers가 있는 줄을 찾아 players :를 artist :로 바꾸어라

 

 

** 콜론(:)으로 끝나는 문자열 모두 변경하기

정규표현식을 이용한 sed 활용법을 정리해 보자

filename:$FLN

system "echo project:$project"

system "echo version:$version"

위의 문자에서 :으로 끝나는 문자열을 모두 변경하여 보자!!!

 

sed s/[a-z]*:/value:/g system.txt

 

변경된 내용은 다음과 같다

value:$FLN

system "echo value:$project"

system "echo value:$version"

 

그러나!! 이것보다 더 좋은 것이 있었으니,

일정 형식의 string에 앞에 어떤 단어를 추가 하고 싶을 때

기존의 filename:, project:, version: 앞에 new_를 추가 하고 싶으면 앰퍼센트를(&) 사용하면된다.

 

** 앰퍼센트(&)

위의 내용에서 각각의 콜론 앞 스트링에 new_를 붙이고 싶다면!!

filename:$FLN

system "echo project:$project"

system "echo version:$version"

 

sed s/[a-z]*:/new_\&/g system.txt

new_filename:$FLN

system "echo new_project:$project"

system "echo new_version:$version" 이렇게 됨 ㅎㅎ

https://m.blog.naver.com/PostView.nhn?blogId=hanajava&logNo=220595096628&proxyReferer=https:%2F%2Fwww.google.com%2F

 

sed사용법

# linux sed사용법sed로 텍스트 편집하기sed (stream editor) : 그래픽 인터페이스가 없는 명령행 유틸리티...

blog.naver.com


2. group

groups 그룹명  -> 그룹에 속한 사용자 계정을 확인할때 사용하는 명령어


ex02 find_sh

현재 디렉토리와 그 하위 디렉토리들에서 파일 이름이 ’.sh’로 끝나는(따옴표 제외) 모 든 파일을 찾는 명령어를 작성하세요. .sh를 제외한 파일 이름만을 표시해야 합니다.

find ./ -type f -exec basename {} \; | grep .sh$ | sed 's/.sh$//g'

  • find [path] 정규식표현
  • -type 지정한 파일 유형을 찾는다. d:디렉토리 f:일반 파일 l:링크파일 b:블록디바이스 c:캐릭터디바이스
  • -exec 찾아진 파일 등과 연계하여 어떠한 명령을 내릴수 있는 옵션. 결과값 {}기호로 표시하고 \;로 끝내야 함.
  • basename {}\;디렉토리이름을 제외한 파일이름만 가져온다.
  • grep 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자할 때 사용하는 명령어입니다. 리눅스에서 가장 많이 사용되는 명령어 중 하나이죠.

 

 

#명령어 grep 참고 https://recipes4dev.tistory.com/157

 

리눅스 grep 명령어 사용법. (Linux grep command) - 리눅스 문자열 검색

1. grep 명령어. grep은 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자할 때 사용하는 명령어입니다. 리눅스에서 가장 많이 사용되는 명령어 중 하나이죠. 하지만 grep 명령어가 문자열을 �

recipes4dev.tistory.com

 

 


 

ex03 count_files

현재 디렉토리 및 그 하위의 모든 디렉토리에 있는 일반 파일 및 디렉토리의 개수 를 세어 표시하는 명령어를 작성하세요. 여기에는 시작 디렉토리인 ’.’도 포함되어야 합니다.

sed -e 's/^ *//g'

find . | wc -l | sed -e 's/^ *//g'

find . | wc -l | sed -e 's/^[ \t]*//'

 

  • find . : 현재 디렉토리(.)에 있는 파일을 찾는다.(하위 디렉토리, 숨겨진 파일도 표시) 점 사이 공백
  • wc : word, line, character, and byte count , wc -l 라인 갯수 표시
  • sed -e 다중편집 가능옵션 's 치환 /^ */ 스페이스로 만들어진 공간까지
  • ^ : line 시작
  • $ : line 끝
  • [\t] : 탭

https://jinwoonote.tistory.com/entry/SED-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9A%A9%EB%B2%95

 

SED 명령어 사용법

★ sed 스트림 편집기 : ed명령어와 grep명령어 기능의 일부를 합친 것이 sed(stream editor)명령어이다 ★ 특징 1) sed 명령어는 1개 라인씩 입력 라인을 읽어들여 표준 출력에 출력한다. 2) sed는 각 라인��

jinwoonote.tistory.com

 


ex04 MAC

 

ifconfig -a | grep 'ether ' | tr -d '\t' | sed 's/ether //g'

 

ifconfig – a 모든 네트워크 인터페이스 구성 확인하기. 

tr -d 문자열에서 지정한 문자를 삭제

 

 

(실행 파일 만들때 #!/bin/bash)


ex05 Can you create it ?

 

오직 "42"만 포함하고 그 밖의 어떠한 것도 포함하지 않는 파일을 작성하세요.

"\?$*'MaRViN'*$?\" 파일이름

 

파일이름에 원래는 특수문자가 포함되면 안되는데 앞에 \ 를 붙여주면 특수문자 사용 가능

 

 

echo -n 42 | tr -d '\n' > \"\\\?\$\*’MaRViN’\*\$\?\\\"


★틀린이유

파일명 복붙하지 않고 하나하나 타이핑 해야됌


ex06 Skip

 

ls -l | awk " NR%2==1"


ex07 r_dwssap

cat /etc/passwd 명령어의 출력 결과에서 주석은 삭제하고 두 번째 행부터 시작하 여 다른 모든 행들은 출력하되, 각 login들 거꾸로 반전시키고 알파벳 역순으로 정렬한 후, FT_LINE1 과 FT_LINE2 을 포함한 그 사이의 값들만 남겨두세요. 이 때, 각 login은 ","로 구분되어야 하며 출력 결과는 "."로 끝나야 합니다.(큰따옴표 없이)

 

cat /etc/passwd | cut -d ":" -f 1 | awk "NR%2==0" | rev | sort -r |

 

cat /etc/passwd | cut -d ":" -f 1 | awk "NR%2==0" | rev | sort -r | xargs | sed -e 's/ /, /g' | sed 's/$/./g'

 

cat /etc/passwd | grep -v '#' | cut -d ":" -f 1 | awk "NR%2==0" | rev | sort -r | awk "NR>=$FT_LINE1 && NR<=$FT_LINE2" | xargs | sed -e 's/ /, /g' | sed 's/$/./g'

 

cat /etc/passwd | grep -v '#' | cut -d ":" -f 1 | awk "NR%2==0" | rev | sort -r | awk -v F1=$FT_LINE1 -v F2=$FT_LINE2 "NR>=F1 && NR<=F2" | xargs | sed -e 's/ /, /g' | sed 's/$/./g' | tr -d '\n'

 

환경변수 설정하는 방법

export [환경변수이름]=조건

ex) export FT_LINE1=4

 

&& and 연산자

|| or 연산자

 

awk -v : 변수선언


ex08 add_chelou

 

echo $FT_NBR1 + $FT_NBR2 | tr "\'" "0" | tr "\\" "1" | tr "\"" "2" | tr "\?" "3" | tr "\!" "4" | tr "mrdoc" "01234" | xargs echo 'obase=13; ibase=5;' | bc | tr "0123456789ABC" "gtaio luSnemf"

5진수를 13진수로 바꿔라

 

반응형

'코딩공부 > etc..' 카테고리의 다른 글

[linux] 자주쓰는 명령어 정리  (0) 2020.05.31
shell 명령어  (0) 2020.05.27
day2 ex00  (0) 2020.05.26
day1 EX00  (0) 2020.05.25
day1  (0) 2020.05.25

댓글