'Unix/Linux'에 해당되는 글 16건

  1. 2010.12.16 grep 제외문자열 -v -Ev
  2. 2010.09.01 (unix)shell script 어제 날짜 구하기
  3. 2010.09.01 (unix)shell script CASE문 예제
  4. 2010.09.01 (unix)shell script 예제
  5. 2010.01.19 [Script]Shell프로그램을 이용한 FTP전송
  6. 2010.01.13 [Script]쉘 스크립트
  7. 2010.01.13 [Script]특정문자 변환 - 일괄처리
  8. 2010.01.13 [Script]특정 문자가 들어가는 문서찾기
  9. 2010.01.13 [Script]sed 사용법 2
  10. 2010.01.13 [Script]sed, awk 사용법 2
2010.12.16 11:37

grep 제외문자열 -v -Ev


grep 제외문자열 -v -Ev

grep에서 특정문자열을 추출하는건 다들 쓰는데 제외하는건 의외로 모르는사람이 많다.

grep Hello a |grep -v apple|grep -v orange| grep -v banana

-v 옵션을 반복하여... 이렇게 쓰는방법이 있고...

grep Hello a |grep -Ev 'apple|orange|banana'

Trackback 0 Comment 0
2010.09.01 13:56

(unix)shell script 어제 날짜 구하기

유닉스 계열중 Solaris, HP, AIX에서는 다음과 같이 하면 어제 날짜를 바로 구할수 있습니다.

 

TZ=KST+15;     UNIX는 Time Zone이라고 해서 지역별 시간대를 가지고 있습니다. 한국은 표준시에 대해서 TZ=KST-9 입니다. 하지만 하루전으로 가기 위해서는 24시간을 더해준답니다. 그래서 KST+15입니다.

DATE=`date +%Y%m%d`

여기서 날짜가 어제 날짜가 구해지는거죠.

echo $DATE

실질적으로 출력해보세요.

 

위를 간단하게 해보면

따라서 yesterday=`TZ=KST+15; date +%Y%m%d`  *주의 : 여기서 `는 명령어 수행을 나타내는 문자로 자판 1번 바로 왼쪽옆에 있는 문자입니다. 아시겠지만 주의하세요.

 

 

도움이 되시길 바랍니다.

 

Linux는 어제 날짜를 구하는 명령어가 따로 있습니다.

 

 

출처 : 지식in

 

============================================================================

 

 

 

오늘 날짜를 구하는 것

date +%Y%m%d

 

어제 날짜를 구하는 것

date +%Y%m%d -d '-1days'

또는

date +%Y%m%d --date '1 days ago'

 

 

쉽다.

물론 man date 보고 하면 좋다.

 

 

출처 : http://blog.naver.com/knight76/30022930265

Trackback 1 Comment 0
2010.09.01 13:55

(unix)shell script CASE문 예제

#!/bin/bash
while [ : ]
do
        echo
        echo -n "Press any key and hit Enter. To stop, enter @ : "
        read char
        case $char in
                "@"   ) break;;
               
[A-Z][A-Z][A-Z]
) echo "uppercase";;
                [0-9][0-9][0-9]
) echo "digit";;
                [a-z][a-z][a-z]
) echo "lowercase";;
                *     ) echo "other" ;;
        esac
done
exit 0

Trackback 0 Comment 0
2010.09.01 13:53

(unix)shell script 예제


/var/log/messages* 화일에서

aaa 라는 문자열이 들어간  행만 뽑아 화일1로 저장하고

그중 8번째 필드값만 추출하는데 데이타가 겹치는 경우가 있어  (중복된 값은 제거) 하고 

화일2로 저장

 

 

grep aaa /var/log/messages* >file1

awk '{print $8}' file1 | sort | uniq >file2

 

두개의 구문을 아래와 같이 한 줄로 실행할 수도 있습니다.

grep aaa /var/log/messages* | awk '{print $8}' | sort | uniq >file2

Trackback 0 Comment 0
2010.01.19 10:27

[Script]Shell프로그램을 이용한 FTP전송


Local서버에서 Remote서버로 다량의 디렉토리와 하위 파일들을 ftp를 이용해서 전송시 쉘프로그램

 

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

ftpFaxPut.sh

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

#!/bin/sh
FTP_CMD="/usr/bin/ftp";
FTP_HOST="000.000.000.000";
FTP_USER="user";
FTP_PASS="passwd";
LOCAL_PATH="/data/tmax/tsdms_New/fileupload/fax/prepared";
BACKUP_PATH="/data/tmax/tsdms_New/fileupload/fax/completed";

export FTP_CMD FTP_HOST FTP_USER FTP_PASS LOCAL_PATH

DIRECTORYS=`ls -1 $LOCAL_PATH`

date >> /data/tmax/cronsh/ftp/ftpFaxexcutedate.txt

for temp in $DIRECTORYS
  do
    if [ ! -f $LOCAL_PATH/$temp ]
    then
      echo "GET DIRECTORY : $temp";
      echo "GET DIRECTORY : $temp" >> /data/tmax/cronsh/ftp/ftpFaxexcutedate.txt
      /data/tmax/cronsh/ftp/ftpFaxPutFile.sh $FTP_CMD $FTP_HOST $FTP_USER $FTP_PASS $LOCAL_PATH $temp > /dev/null
    fi
  done

# File Move after File Transfer
mv $LOCAL_PATH/* $BACKUP_PATH/


exit 0

 

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

ftpFaxPutFile.sh

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

#!/bin/sh

$1 -n $2 << EOF
user $3 $4
bi
prompt
mkdir $6
lcd $5/$6
cd $6
mput *
bye
<< EOF

exit 0


참고 : http://blog.naver.com/wpaddle/100094321257

Trackback 0 Comment 0
2010.01.13 11:18

[Script]쉘 스크립트

도스(DOS) 배치 파일을 쉘 스크립트로 변환

아주 많은 프로그래머들은 PC 위에서 도는 도스에서 스크립트를 배웠습니다. 기능이 조금 떨어지는 도스 배치 파일 언어로도 꽤 강력한 스크립트나 어플리케이션을 작성할 수도 있지만 그렇게 하려면 아주 해박한 지식을 사용해 해결책을 찾거나 꽁수를 부려야 합니다. 가끔은 오래된 도스용 배치 파일을 유닉스 쉘 스크립트로 변환해서 써야될 경우가 생기지만 이렇게 하는것이 그렇게 어렵지만은 않습니다. 왜냐하면 도스 배치 파일 연산자들이 기능이 동일한 쉘 스크립트 연산자의 서브셋에 불과하기 때문입니다.

표 G-1. 배치 파일 키워드/변수/연산자 와 그에 해당하는 쉘 동의어

배치 파일 연산자 쉘 스크립트 동의어
% $ 명령어줄 매개변수 접두사
/ - 명령어 옵션 플래그
\ / 디렉토리 패스 구분자
== = (같음) 문자열 비교 테스트
!==! != (다름) 문자열 비교 테스트
| | 파이프
@ set +v 현재 명령어를 에코하지 말 것
* * 파일명 "와일드 카드"
> > 파일 재지향(덮어 쓰기)
>> >> 파일 재지향(덧붙여 쓰기)
< < 표준입력 재지향
%VAR% $VAR 환경 변수
REM # 주석
NOT ! 뒤에 나오는 테스트 부정
NUL /dev/null 명령어 출력을 없애기 위한 "블랙홀"
ECHO echo 에코 (Bash 에는 옵션이 많이 있음)
ECHO. echo 빈 줄 에코
ECHO OFF set +v 다음에 나오는 명령어를 에코하지 말 것
FOR %%VAR IN (LIST) DO for var in [list]; do "for" 루프
:LABEL 없음 (필요치 않음) 라벨
GOTO 없음 (대신 함수를 씀) 스크립트의 다른 곳으로 건너 뜀
PAUSE sleep 일정 간격을 두고 잠시 대기
CHOICE case 나 select 메뉴 선택
IF if if-test
IF EXIST FILENAME if [ -e filename ] 파일이 존재하는지 확인
IF !%N==! if [ -z "$N" ] 변경가능한 매개변수인 "N"이 없다면
CALL source 나 . (도트 연산자) 다른 스크립트를 "포함"
COMMAND /C source 나 . (도트 연산자) 다른 스크립트를 "포함"(CALL과 동일)
SET export 환경 변수를 세트
SHIFT shift 명령어줄 변수 목록을 왼쪽으로 이동(shift)
SGN -lt or -gt (정수) 부호(sign)
ERRORLEVEL $? 종료 상태
CON stdin "콘솔"(표준입력)
PRN /dev/lp0 (일반적인) 프린터 디바이스
LP1 /dev/lp0 첫번째 프린터 디바이스
COM1 /dev/ttyS0 첫번째 시리얼 포트

배치 파일은 대개 도스 명령어를 갖고 있습니다. 도스용 배치 파일이 쉘 스크립트로 변환되기 위해서는 이 명령어들은 꼭 동일한 유닉스 명령어로 변환되어야 합니다.

표 G-2. 도스 명령어와 동일한 유닉스 명령어

도스 명령어 동일한 유닉스 명령어 효과
ASSIGN ln 파일이나 디렉토리를 링크
ATTRIB chmod 파일 퍼미션 변경
CD cd 디렉토리 변경
CHDIR cd 디렉토리 변경
CLS clear 스크린 지우기
COMP cmp or diff 파일 비교
COPY cp 파일 복사
Ctl-C Ctl-C 정지(시그널)
Ctl-Z Ctl-D EOF (end-of-file)
DEL rm 파일 삭제
DELTREE rm -rf 디렉토리의 하위 디렉토리까지 포함해서 삭제
DIR ls -l 디렉토리 보이기
ERASE rm 파일 삭제
EXIT exit 현재 프로세스 종료
FC comm, cmp 파일 비교
FIND grep 파일안에서 문자열 찾기
MD mkdir 디렉토리 생성
MKDIR mkdir 디렉토리 생성
MORE more 텍스트 파일 쪽단위(paging) 필터
MOVE mv 이동
PATH $PATH 실행파일들의 경로
REN mv 이름 바꾸기(이동)
RENAME mv 이름 바꾸기(이동)
RD rmdir 디렉토리 삭제
RMDIR rmdir 디렉토리 삭제
SORT sort 파일 정렬
TIME date 시스템 시간 보여주기
TYPE cat 파일을 표준출력으로 출력
XCOPY cp (확장) 파일 복사

참고: 사실 모든 유닉스, 쉘 연산자, 명령어들은 그들과 동일한 도스용보다 많은 옵션과 강력한 기능을 갖고 있습니다. 많은 배치 파일 스크립트들은 read의 불완전한 버전인 ask.com같은 외부 유틸리티에 의존합니다.

도스는 파일명 와일드 카드 확장에 대해서 오직 *? 문자만을 인식하는 제한되고 부족한 서브셋을 지원합니다.

Trackback 0 Comment 0
2010.01.13 10:59

[Script]특정문자 변환 - 일괄처리

#!/bin/sh

src="hack_code..."

src1="<script language=javascript><!-- "
src2=" --></script>"
dst=" "
hack="hack_code.txt"
pattern="*htm*|*.php|*.js"

 

if [ "$3" = "" ]; then
        echo $"{Usage; $0 \"`pwd`\" \"find_string\"}"
else

        rm -f $hack
        echo "removed $hack"
        echo ""

        find "$1" -name "*" | egrep "$pattern" | xargs fgrep -l "$2" >> $hack


        for i in `cat $hack`;
        do
                cp -f $i ${i}_bak
                replace "$src" "$dst" -- $i
                replace "$src1" "$dst" -- $i
                replace "$src2" "$dst" -- $i
                sed -i '/^$/d' $i          #빈줄 삭제
#               echo "replaced $i"
        done

        echo ""
        echo "--------------------------------"
        echo "created $hack"
        echo "completed replacing hack_code!!!"
        echo "--------------------------------"
fi

exit;
[출처] http://blog.naver.com/siyang6?Redirect=Log&logNo=30047779296

Trackback 0 Comment 0
2010.01.13 10:58

[Script]특정 문자가 들어가는 문서찾기


-i : 대소문자 구별을 하지 않는다.
-v : pattern
을 포함하지 않는 행만 출력한다
.
-n :
행번호를 출력한다
.
-l :
파일명만 출력한다
.
-c :
패턴과 일치하는 라인의 갯수만 보여준다.

 

grep : 강력한 패턴 매칭 템플릿을 정의하기 위해 "정규 표현식"을 사용할 수 있다.  
egrep [
옵션] "패턴|패턴|..." [대상파일들] : 확장된 정규 표현식을 사용하며, 찾아낼 패턴을 여러개 지정할 수 있다. '|'기호는 불린 연산자 "OR"에 해당하므로, 정해진 패턴들에 포함되는 모든 라인을 보여준다.  

fgrep [옵션] 패턴 [대상파일들] : 패턴과 정확히 일치하는 것만을 찾아 준다

 

# 모든 html 문서에서 pattern 이 들어가 있는 파일을 보여준다.

find / -name *.html -exec fgrep -l "pattern" {} \;

find / -name *.html | egrep -i "pattern"

 

# 모든 html 문서에서 pattern 이 들어가 있는 문자를 보여준다.

find / -name *.html -exec fgrep "pattern" {} \;

 

find  -name *.htm -exec fgrep -l "today.swf" {} \;

 

# 모든 html 문서에서 문자열을 변환(replace)한다.

find / -name *.html -exec replace "<iframe src=http://www.krvkr.com/wormkr.htm width=0 height=0></iframe>" "<br>" -- {} \;

 

find / -name *.exe

 

# 모든 exe파일을 삭제

find / -name *.exe -exec rm -f {} \;

 

# *_.ini파일을 삭제

find / -name *_.ini -exec rm -f {} \;

 

### sed 를 이용한 문자 변환

# www. krvkr .com 을 blank로 변환

find / -name *.htm exec sed i s/www.krvkr.com/blank/g {} \;  

 

# www. krvkr. Com 이 들어가는 줄을 삭제

find / -name *.htm exec sed i /www.krvkr.com/d {} \;

출처 :
http://blog.naver.com/siyang6?Redirect=Log&logNo=30021354674
Trackback 0 Comment 0
2010.01.13 10:56

[Script]sed 사용법 2

sed 's/찾는문자열/바꿀문자열/g' 입력파일

이것이 가장 기본적인 사용법이랍니다. 이렇게 하면 앞에서 말했듯이 그 결과는 표준 출력으로 보내집니다. 또한 문자열을 지정할 때, 쉘 스크립트 작성때와 마찬가지로, 쉘에서 특별한 의미로 쓰이는 문자들은 '' 문자를 앞세워서 사용합니다.

   .*[]^$

이 문자들이 sed, shell에서 특별한 의미로 쓰임으로 이 문자 자체를 의미하려면, '' 문자를 먼저 사용해야겠지요.
e.g :

  sed 's/[J.S. Bach {$ for music}]/[Bach, J.S {$ for music}]/' filename

이게 아니라,

  sed 's/[J.S. Bach {$ for music}]/[Bach, J.S {$ for music}]/' filename

여기서 하나 신기한 것은 "찾는 문자열"에서만 이런 것이 적용된다는 것입니다.
"바꿀 문자열"에서도 똑같이 지정하면, 그 지정한 그대로 출력되더군요.
(신기하나? 원래 당연한 것 아닌감? 표준 출력이니까.)

그럼 이것은 무엇일까요?

  sed 's//usr/bin//bin/g' filename

"/usr/bin" -> "/bin" 으로 바꾸는 것?
물론 오류가 있는 사용법은 아닙니다. 하지만, 경로명이 길어지면, 알아 보기가 힘들겠지요. 그래서, 경로명을 사용할 때는

  sed 's#/usr/bin#/bin#g' filename

이렇게 한답니다.

또한 "Index"라는 문자열은 "색인"으로 바꾸고, "Contents"라는 문자열은 "차례"라는 내용으로 바꾸고 싶다면, sed를 두번 사용하느냐? 이런 멍청한 짓(?) 하는 사람은 없겠지요.
이럴 때는

  sed -e 's/Index/색인/g' -e 's/Contents/차례/g' 파일이름

이런 식으로 한답니다. '-e' 옵션은 "또 있다"는 뜻이랍니다.
이 옵션이 빠지면, 첫번째 경우만 처리하고 두번째 경우("차례"로 바꾸는 것)는 무시된다고 하네요.

3. 정규표현식(Regular Expression) 사용하기

모든 찾기가 그러하듯이 여기서도 여전히 정규식이 사용되는군요.

  sed 's/^Thu /Thursday/' filename

이건 저도 아네요. 껄껄. '^' 기호는 그줄의 첫칸을 의미하지요.
즉, 줄 첫 칸에만 있는 "Thu" 문자열을 "Thursday"로 바꾸는 경우네요.
그런데, 여기서는 파일 전체를 대상으로 한다는 'g' 문자가 빠졌군요.
왜 빠져도 되는지는 모르겠지만, 아무튼 실행되더군요.

  sed 's/ $//' filename

이건 반대로 줄 끝에 있는 공백 문자를 없애는 것입니다.
즉 " $" 문자열을 "" 문자열로. 텍스트 파일에 대한 기본적인 지신이 부족한 사람들에게는 "그게 뭐 어때서?" 하면서 의아해 하겠지만, 엄격히 따지면, " $" 문자열이란, 공백문자랑, 그 다음에 줄 바꿈 문자가 있는 것을 말합니다. 이것을 윗 명령으로 그 공백 문자를 없애는 경우입니다.

과연 이런 게 어디 쓰일까? 회의를 둘 수도 있겠지만, 의외로 필요할 때가 많습니다.
한 예를 들어 awk (요곤 기회 주어지면 다음에 하지요. sed 보다 복잡 하더군요.) 에서 마지막 필드 다음에 줄바꿈 문자가 있어야 되는데, 이렇지 못하고, 공백문자가 있어, 원하는 결과 값을 못 얻어 내는 경우가 있거든요. 이럴 때 유용하게 쓰입니다.

  sed 's/^$/이건 빈 줄이다/' filename

줄 첫칸에 줄 바꿈 문자가 있다? 당연히 빈줄이지요. 껄껄.

  sed 's/Apr .. ..:..:.. 1980/Apr 1980/g' filename

이런 식으로 많이 사용하지 않았나요? vi 편집기나, grep 명령에서 말입니다.
'.'(점)은 임의한 한 문자를 뜻하지요. 윗 예제는 뭔고하면, "Apr 11 11:09:25 1980"  이런 식으로 (어디서 많이 보았지요?) 된 여러 경우들을 무조건  "Apr 1980"으로 통일하는 경우입니다.

  sed 's/[Oo]pen[Ww]in/openwin/g' filename

  sed 's/ [A-Z]. / /g' filename

이것도 그럴 것 같은데. " D. " 문자열 같은게, " " 문자열로 바꾸는 것입니다.

  sed 's/ [^A-DHM-Z]. / /g' filename

이건 윗 예제와 반대지요. 즉, A,B,C,D,H,M,O,P,Q,R,S,T,U,V,W,Z,Y,Z 문자는 제외한 다른 단일 문자의 경우는 모두 공백문자로.

그 외에도 몇개 더 있는데, 뭐 그다지 중요한 것은 아니네요.
grep나, ls 명령에서 이미 잘 쓰고 있는 것들이니까,

  * : 임의의 문자열.
  [][^] 등.. 여러 표현식을 섞어서 사용하는 것.


4. sed 안에서도 자체적으로 저장을 한다는군요. (신기하기도해라)

이 말이 무신 말인고 하면, 앞에서 말한 sed의 개념으로 본다면, 단지, 표준 입력으로 입력받아,
표준 출력으로 단순히 변환해서 보내는 역활밖에 하지 않는데, 저장할 여력이 어디 있을까 하는데.....

이런 경우를 생각해 보지요.

"*남자*와 *여자*"라는 정규식에 맞는 문자열에서 공백문자를 두고 서로 바꾸어야할 경우. 지금까지의 개념으로 본다면, 이런 문제는 sed에서 불가능하지요.

먼저 발견되는 첫번째 환경을 저장하고, 다음 두번째 환경이 곧이어 발견되면 그것을 서로 바꾸면 되겠지요.

이렇게 하는 것이 "(" ")" (괄호)입니다.

  sed 's/^([A-Z][A-Za-z]*), ([A-Z][A-Za-z]*)/2 1/' filename

이것은 "문자열1, 문자열2" 이런 내용을 "문자열2 문자열1"로 바꾸는 것입니다. 어떻게 1, 2를 서로 바꾸느냐 하면, "바꿀문자열 지정부분에, 2 1 이런식으로 써주면 되지요. 영어 표현 중에, "Lastname, Firstname" 이런 것을 "Firstname Lastname" 이런 식으로 바꾸고자 할 때 유용하게 쓰인답니다.

필요에 따라 입력 파일의 특정 범위 내에서만 문자열 바꾸기를 해야할
경우가 생기는데, 이때는 s 앞에다 그 범위를 지정합니다.

  sed '1,20s/foobar/fubar/g' filename

이것은 첫번째 줄부터 20번째 줄까지만 찾아서 바꾸는 것입니다.

  sed '/^Aug/s/Mon /Monday /g' filename

이런 식도 가능하다네요. 즉, 줄 처음에 Aug (팔월인가?) 라는 문자열이
있는 그 줄의 Mon 이라는 문자열을 Monday 로 바꾸는 것입니다.

이 반대라면,

  sed '/^Aug/!s/Mon /Monday /g' filename

이런 식으로.

또한 조건을 여러게 줄 수도 있습니다.

  sed '/^Aug/,/^Oct/s/Mon /Monday /g' filename

어떻게 작동할 지 알겠지요?

지금까지 설명 예로든 것은 모두 바뀌는 부분을 포함해서, 입력된 모든 내용을 다시 표준 출력으로 보여줍니다. 필요에 따라 그 바뀌는 줄에 대해서만 출력해야 할 경우가 생기지요.

  sed -n 's/fubar/foobar/gp' filename

이런 식으로 사용하는데, 이때 주의 할 것은 -n 옵션을 사용한다는 것과 끝부분에 g가 아니라, gp라는 것.


5. 파일로 저장된 sed 명령. sed 스크립트.

여러 sed 명령을 계속 사용해야 할 경우는 이 작업을 또 보다 편하게 할 수 없을까? 해서, 생겨난 것이 스크립트인데, 가령,

        s/color/colour/g
        s/flavor/flavour/g
        s/theater/theatre/g

한 파일에 이렇게 입력하고, sample.sed 라는 이름으로 저장한 후, 이것을 사용하려면 다음과 같이 합니다.

  sed -f sample.sed filename

그럼 쉘 스크립트에서 실행 프로그램을 지정하는 #! 기호를 사용하면,

        #!/usr/bin/sed -f
        # This file is named "sample2.sed"
        s/color/colour/g
        s/flavor/flavour/g
        s/theater/theatre/g

이렇게 작성하고, sample2.sed 라는 이름으로 저장한 후,

  chmod u+x sample2.sed

  ./sample2.sed filename

이렇게 바로 하나의 독자적인 스크립트로 사용할 수도 있겠지요.

-----------

이상이 sed 맛보기 내용의 전부입니다.

얼마나 도움이 되었을지 의문이네요.

sed 단독으로는 그리 유용하게 사용되지 못합니다.

이것을 제대로 사용하려면, 결국 유닉스에서의 텍스트 처리 명령들에 대해서 모두 꾀뚤고(?) 있어야 하겠더군요.

아무튼 저는 오늘 sed로 원하는 작업을 할 수 있었습니다.
그 작업은

http://free.xtel.com/~teodeul/hUNIXhelp
라는 URL에서 보여집니다. 껄껄.

다음에 시간나면, awk 맛보기를 올려보지요.
또 시간나면, flex도, 그리고, 기타 textutil 팻키지의 명령들도...

아직까지는 아무래도 유닉스 쪽에서는 텍스트 처리 기능이 유용하게
쓰이나봅니다.

[출처] http://blog.naver.com/siyang6?Redirect=Log&logNo=30021355089


 

Trackback 0 Comment 0
2010.01.13 10:54

[Script]sed, awk 사용법 2


-n 파일 안에서의 패턴이 발견된 라인 및 라인 번호
-v 패턴이 발견되지 않은 라인
-i 대소구분 무시(ignore)
-l 패턴이 들어있는 파일 이름만
-c 패턴이 들어있는 라인 번호만

 

#### 줄 관련 명령어와 기능
d  텍스트 줄 삭제 명령
a\   텍스트 줄 다음에 첨가 명령
i\    텍스트 줄 앞에 첨가 명령
c\   텍스트 줄 변경 명령
n      다음 텍스트 줄을 읽는 명령
g      전파일 부분을 치환하는 명령
=      현재 줄 번호를 출력
[/패턴/]=   대응되는 줄의 패턴과 일치하는 각 줄의 번호를 표준 출력
p     패턴 일치되는 줄을 표준 출력
s/패턴/대체패턴/      플래그 패턴을 대체패턴으로 바꿈.  플래그는 g, p, wfile
y/문자열1/문자열2/     문자열1과 문자열2를 서로 바꿈

 

^      : ^패턴            : 패턴으로 시작하는 모든 라인 찾기
$      : 패턴$           : 패턴으로 끝나는 모든 라인 찾기
.       : d...              : d로 시작하는 4자리 character 찾기
*      : [a-d]*          : a, b, c, d로 시작하는 character 찾기
[]    : [Dd]atabase  : Database 또는 database 찾기
[^]   : [^D]             : D가 나타나지 않는 라인 찾기


# sed '#d' filename      : # 라인만 삭제
# sed '$d' filename      : 마지막 라인 삭제
# sed '#,$d' filename   : # 라인부터 마지막 라인까지 지우기
# sed '#,#d' filename   : # 라인부터 # 라인까지 지우기
# sed '1d' sed_test     # 1 라인만 삭제
# sed '$d' sed_test     # 마지막 라인만 삭제
# sed '/purpose/d' sed_test > set_out     # sed 처리 결과를 sed_out 으로 저장
# cat set_out
# sed '/purpose/p' sed_test             # 패턴이 포함된 라인이 두번 출력(print)된다.
# sed -n '/purpose/p' sed_test        # 패턴이 포함된 라인만 출력된다.
# sed 's/$/  Oracle/' sed_test       # 각 라인의 마지막에 원하는 글자 추가
# sed 's/  */#/g' sed_test              # space를 찾아서 #기호로 변환한다.
# sed 's/  */-/g' sed_test              # space를 찾아서 -기호로 변환한다.
                                                               # * 기호 앞에 space가 두개라는 점에 유의

## 한번에 여러 가지 편집 수행
# sed -e 's/database/DATABASE/g' -e 's/information/INFORMATION/g' sed_test

 

▒ awk : 패턴 검색과 처리를 위한 언어  >>  awk '{ action}' filename

# ls -l | awk '{print $0}'              # 전체 필드가 모두 나타나도록...
# ls -l | awk '{print $1}'                    # 1번 필드만 나타도록...
# ls -l | awk '{print $1, $9}'               # 1번과 9번 필드만 나타나도록...
# ls -l | awk '{print $3 "\t" $4 "\t" $9}'                # Tab 키가 적용된 결과...
# ls -lt | awk '{print $9, "is using", $5, "bytes"}'     # text 추가
# ls -lt | awk '$5 <= 200 {print $0}'   # 5번 필드가 200 이하일 경우 출력    

[출처] http://blog.naver.com/siyang6?Redirect=Log&logNo=30048138641

Trackback 0 Comment 0