셸 프로 그래 밍 노트 - 흐름 편집 Sed

제7 장 흐름 편집
뭐 공부 해요?
편집기 선택
   UNIX/Linux 세계 에는 선택 할 수 있 는 많은 텍스트 편집기 가 있 습 니 다.예 를 들 어 가장 자주 사용 하 는 VI 와 emacs.자신 이 가장 잘 아 는 편집 이기 가 생 긴 후에 야 유 닉 스 의 각종 관리 와 편집 임 무 를 쉽게 처리 할 수 있다.
    VI, emacs 와 같은 편집 기 는 상호작용 편집기 라 고 불 린 다.대화 형 편집 기 는 좋 지만 프로그램 에서 텍스트 처리 작업 을 끝내 야 할 때 도움 이 되 지 않 습 니 다.명령 행 에서 완성 할 수 있 는 편집 도구 가 필요 합 니 다.
    우 리 는 일괄 처리 방식 으로 파일 을 편집 할 수 있 는 모든 관리 절차 가 자동화 되 기 를 기대한다.많은 텍스트 편집 에 대한 요 구 는 텍스트 의 줄 마다 같은 동작 을 하 는 것 이다.이런 처 리 는 sed 로 완성 할 수 있다.
sed 는 스 트림 편집기 라 고 합 니 다.스 트림 편집기 가 무엇 입 니까?스 트림 편집 기 는 파이프 와 같은 표준 입력 으로 받 은 데 이 터 를 편집 할 수 있 습 니 다.따라서 편집 할 데 이 터 를 디스크 에 저장 할 필요 가 없다.데이터 파 이 프 를 sed 로 쉽게 출력 할 수 있 기 때문에 sed 를 강력 한 셸 스 크 립 트 의 길 고 복잡 한 파이프 로 사용 하기 쉽 습 니 다.
 
Sed 버 전
버 전 보기
[houchangren@ebsdi-23260-oozie ~]$ sed --version
GNU sed version 4.1.5
Copyright (C) 2003 Free SoftwareFoundation, Inc.
This is free software; see the source forcopying conditions.  There is NO
warranty; not even for MERCHANTABILITY orFITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.

Sed 인 스 턴 스
Sed 의 작업 방식
   sed 는 입력 데 이 터 를 통 해 사용자 가 지정 한 편집 작업 (명령) 을 수행 합 니 다.sed 는 줄 에 기반 한 것 이기 때문에
모든 줄 에 순서대로 명령 을 집행 하 다.그리고 sed 는 그 결 과 를 표준 출력 (stdout) 에 기록 합 니 다. 입력 을 수정 하지 않 습 니 다.
서류
 
매개 변수 목록 참조:
http://www.cnblogs.com/edwardlost/archive/2010/09/17/1829145.html
 
예시:
[houchangren@ebsdi-23260-oozie shell]$ head -n5 /etc/passwd > /tmp/passwd.bak
[houchangren@ebsdi-23260-oozie shell]$cat  /tmp/passwd.bak
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[houchangren@ebsdi-23260-oozie shell]$ sed -e 'd'  /tmp/passwd.bak
[houchangren@ebsdi-23260-oozie shell]$ sed -e '1d' /tmp/passwd.bak
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[houchangren@ebsdi-23260-oozie shell]$ sed -e '3d' /tmp/passwd.bak
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
 

 
위의 'd' 는 매개 변수 애플 리 케 이 션 입 니 다. 모든 줄 을 삭제 하 는 것 이 기본 입 니 다. 지정 한 숫자 는 몇 번 째 줄 의 기록 을 삭제 하고 첫 번 째 줄 의 1 줄 표시 후 네 줄 을 삭제 합 니 다.두 번 째 는 3 조 를 삭제 하고 나머지 4 조 를 표시 합 니 다.
 
 
 
 
  NOTE
    이 예 에서 몇 가지 주의해 야 할 일이 있다.
    1)/tmp/passwd. bak 를 수정 하지 않 았 습 니 다. 이것 은 sed 가 명령 행 에서 지정 한 파일 만 읽 기 때문에 입력 으로 사용 합 니 다. - 이 파일 을 수정 하려 고 하지 않 습 니 다.
    2) 주의해 야 할 일 은 sed 가 행 을 향 한 것 이다.d '명령 은 sed 에 게 모든 입력 데 이 터 를 한꺼번에 삭제 하 라 고 간단하게 알려 주 는 것 이 아니다.반면, sed 는 한 줄 씩/etc/passwd. bak 의 모든 줄 을 모드 버퍼 라 는 내부 버퍼 에 읽 고 한 줄 을 모드 버퍼 에 읽 으 면 'd' 명령 을 실행 한 다음 모드 버퍼 의 내용 을 인쇄 합 니 다 (이 예 에 서 는 내용 이 없습니다). 주 소 를 사용 하지 않 으 면 명령 은 모든 줄 에 적 용 됩 니 다.
3) 'd' 명령 을 포함 하 는 작은 따옴표 의 용법.단일 따옴표 로 scd 명령 을 묶 는 습관 을 기 르 는 것 은 좋 은 생각 입 니 다. 셸 확장 을 사용 하지 않 아 도 됩 니 다.
 
Sed 작업 주소 범위
 
 
명령 의 작업 줄 영역 을 지정 합 니 다. 예 를 들 어 아래 1 - 2 줄 과 3 - 6 줄 은 물론 6 줄 이 없 으 면 삭제 하 는 만큼 만 있 습 니 다.
 
[houchangren@ebsdi-23260-oozie shell]$ sed -e '1,2d' /tmp/passwd.bak
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[houchangren@ebsdi-23260-oozie shell]$ sed -e '3,6d' /tmp/passwd.bak
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

 
 
sed 주석 무시
 
 
[houchangren@ebsdi-23260-oozie shell]$ cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* allthe other init scripts.
# You can put your own initialization stuffin here if you don't
# want to do the full Sys V style initstuff.
 
touch /var/lock/subsys/local
hive --service hiveserver &
[houchangren@ebsdi-23260-oozie shell]$ sed -e '/^#/d' /etc/rc.local | more
 
touch /var/lock/subsys/local
hive --service hiveserver &
 
 
[houchangren@ebsdi-23260-oozie shell]$ sed -e '/^[^#]/d' /etc/rc.local | more
#!/bin/sh
#
# This script will be executed *after* allthe other init scripts.
# You can put your own initialization stuffin here if you don't
# want to do the full Sys V style initstuff.
 

 
규칙 식
 
Sed 에서 사용 하 는 규칙 식 문자
 
 
문자
묘사 하 다.
^
행수 와 일치
$
줄 끝 과 일치
.
임의의 문자 와 일치 합 니 다.
*
이전 문자 의 0 개 이상 과 일치 합 니 다.
[]
[] 안의 모든 문자 와 일치 합 니 다.
 
 
 
Sed 규칙 식 인 스 턴 스
 
 
규칙 식
묘사 하 다.
/./
최소한 한 문 자 를 포함 하 는 모든 줄 과 일치 합 니 다.
/../
최소 두 문 자 를 포함 하 는 모든 줄 과 일치 합 니 다.
/^#/
'\#' 로 시작 하 는 임의의 줄 과 일치 합 니 다. 보통 주석 입 니 다.
/}$/
'}' 이 끝 난 임의의 줄 과 일치 합 니 다.
/} *$/
} 뒤에 빈 칸 이 있 습 니 다. 이것 은 '}' 이후 0 개 이상 의 빈 칸 이 끝 난 임의의 줄 과 일치 합 니 다.
/[abc]/
소문 자 'a, b, c 를 포함 하 는 임의의 줄 과 일치 합 니 다.
/^[abc]/
a, b, c 로 시작 하 는 모든 줄 과 일치 합 니 다.
 
 
- n 매개 변수 이 옵션 은 sed 에 인쇄 모드 공간 을 명확 하 게 요구 하지 않 으 면 이렇게 하지 않 는 다 는 것 을 알려 줍 니 다.
 
 
 
[houchangren@ebsdi-23260-oozie shell]$ sed -n -e '/^[echo]/p' user_login.sh
echo " user $1 is on"
else
echo " user $1 is off"
 
[houchangren@ebsdi-23260-oozie shell]$ sed -n -e '/[abc]/p' user_login.sh
#!/bin/bash
function user_login(){
echo " user $1 is on"
echo " user $1 is off"
 
 
[houchangren@ebsdi-23260-oozie shell]$ cat a.c
#include <stdio.h>
#include <math.H>
 
int main (){
// int base,n;
// scanf("%d,%d
",&b,&n) } [houchangren@ebsdi-23260-oozie shell]$ sed -n -e '/main[[:space:]]*(/,/^ }/p' a.c | more int main (){ // int base,n; // scanf("%d,%d
",&b,&n) } [houchangren@ebsdi-23260-oozie shell]$ sed -n -e '/^\//p' a.c | more // int base,n; // scanf("%d,%d
",&b,&n)

 
강력 한 Sed 기능
바꾸다
 
대체 공식:  sed - e s [기호] [바 꿀 문자] [기호] [바 꾼 문자] [기호] [g]
 
 
실례:
 
[houchangren@ebsdi-23260-oozie data]$ cattwister.txt    //     
I wish to wish the wish you wish to wish,but if you wish the wish the witch
 wishes, I won't wish the wish you wish towish.
I wish to wish the wish you wish to wish,but if you wish the wish the witch
 wishes, I won't wish the wish you wish towish.
I wish to wish the wish you wish to wish,but if you wish the wish the witch
 wishes, I won't wish the wish you wish towish.
I wish to wish the wish you wish to wish,but if you wish the wish the witch
 wishes, I won't wish the wish you wish towish. 
[houchangren@ebsdi-23260-oozie data]$ sed -e 's/wish/want/' twister.txt   //           
I want to wish the wish you wish to wish,but if you wish the wish the witch
 wantes, I won't wish the wish you wish towish.
I want to wish the wish you wish to wish,but if you wish the wish the witch
 wantes, I won't wish the wish you wish towish.
I want to wish the wish you wish to wish,but if you wish the wish the witch
 wantes, I won't wish the wish you wish towish.
I want to wish the wish you wish to wish,but if you wish the wish the witch
 wantes, I won't wish the wish you wish towish. 
[houchangren@ebsdi-23260-oozie data]$ sed -e 's/wish/want/g' twister.txt  //         
I want to want the want you want to want,but if you want the want the witch
 wantes, I won't want the want you want towant.
I want to want the want you want to want,but if you want the want the witch
 wantes, I won't want the want you want towant.
I want to want the want you want to want,but if you want the want the witch
 wantes, I won't want the want you want towant.
I want to want the want you want to want,but if you want the want the witch
 wantes, I won't want the want you want towant. 
[houchangren@ebsdi-23260-oozie data]$ sed -e '1,2s/wish/want/' twister.txt  //  1 2       
I want to wish the wish you wish to wish,but if you wish the wish the witch
 wantes, I won't wish the wish you wish towish.
I wish to wish the wish you wish to wish,but if you wish the wish the witch
 wishes, I won't wish the wish you wish towish.
I wish to wish the wish you wish to wish,but if you wish the wish the witch
 wishes, I won't wish the wish you wish towish.
I wish to wish the wish you wish to wish,but if you wish the wish the witch
 wishes, I won't wish the wish you wish towish. 
[houchangren@ebsdi-23260-oozie data]$ sed -e '1,2s/wish/want/g' twister.txt  //  1 2      
I want to want the want you want to want,but if you want the want the witch
 wantes, I won't want the want you want towant.
I wish to wish the wish you wish to wish,but if you wish the wish the witch
 wishes, I won't wish the wish you wish towish.
I wish to wish the wish you wish to wish,but if you wish the wish the witch
 wishes, I won't wish the wish you wish towish.
I wish to wish the wish you wish to wish,but if you wish the wish the witch
 wishes, I won't wish the wish you wish towish. 
[houchangren@ebsdi-23260-oozie data]$

 
'/' 기호 가 필요 할 때 가 있 으 니까 '/' 선 을 사용 하 세 요.
부 호 를 만 들 기 가 불편 하 니 다른 것 으로 바 꿀 수 있다. 예 를 들 어 사칭 ':'
 
 
 
[houchangren@ebsdi-23260-oozie data]$ cat hivepath.txt
/usr/local/hive-0.7.1-cdh3u6/bin/hive
/usr/local/hive-0.7.1-cdh3u6/bin/hive
/usr/local/hive-0.7.1-cdh3u6/bin/hive
/usr/local/hive-0.7.1-cdh3u6/bin/hive
[houchangren@ebsdi-23260-oozie data]$ sed -e s:/usr/local:/usr/lib:g hivepath.txt
/usr/lib/hive-0.7.1-cdh3u6/bin/hive
/usr/lib/hive-0.7.1-cdh3u6/bin/hive
/usr/lib/hive-0.7.1-cdh3u6/bin/hive
/usr/lib/hive-0.7.1-cdh3u6/bin/hive

 
 
 
 
 
모든 html 태그 인 스 턴 스 필터
 
 
 
 
[houchangren@ebsdi-23260-oozie data]$ cat test.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
 <TITLE> New Document </TITLE>
 <META NAME="Generator" CONTENT="EditPlus">
 <META NAME="Author" CONTENT="">
 <META NAME="Keywords" CONTENT="">
 <META NAME="Description" CONTENT="">
 </HEAD>
 
 <BODY>
 
 I'mtest html
 </BODY>
</HTML>
 
[houchangren@ebsdi-23260-oozie data]$ sed -e 's/<[^>]*>//g' test.html
 
 
 
  New Document
 
 
 
 
 
 
 
 
 I'mtest html
 
 

 
조합 명령
 
 
여러 명령 조합
여러 명령 을 동시에 사용 할 때 분 호 를 사용 할 수 있다.
 
[houchangren@ebsdi-23260-oozie data]$ sed -e '=' fruit.txt  //   =     
1
%%banae 
2
banana  
3
apple
4
Presimmon
5
%%banae 
6
apple 
7
Banana  
8
orange  
9
presimmon
[houchangren@ebsdi-23260-oozie data]$ sed -e '=;p' fruit.txt //                
1
%%banae 
%%banae 
2
banana  
banana  
3
apple
apple
4
Presimmon
Presimmon
5
%%banae 
%%banae 
6
apple 
apple 
7
Banana  
Banana  
8
orange  
orange  
9
presimmon
presimmon
[houchangren@ebsdi-23260-oozie data]$ sed -n -e '=;p' fruit.txt //  -n   p     
1
%%banae 
2
banana  
3
apple
4
Presimmon
5
%%banae 
6
apple 
7
Banana  
8
orange  
9
Persimmon
[houchangren@ebsdi-23260-oozie data]$ sed -n -e 'p' -e = fruit.txt  //-e        
%%banae 
1
banana  
2
apple
3
Presimmon
4
%%banae 
5
apple 
6
Banana  
7
orange  
8
presimmon
9
 
 

때로는 너무 많은 명령 이 연결 되 어 실 행 될 때 - e 도 부족 할 수 있 습 니 다. - f 로 텍스트 를 지정 한 다음 텍스트 에 명령 을 작성 할 수 있 습 니 다.
 
 
 
[houchangren@ebsdi-23260-oozie data]$ cat hivepath.txt
/usr/local/hive-0.7.1-cdh3u6/bin/hive
/usr/local/hive-0.7.1-cdh3u6/bin/hive
/usr/local/hive-0.7.1-cdh3u6/bin/hive
/usr/local/hive-0.7.1-cdh3u6/bin/hive
//1d     ,   /usr/local   /usr/bin,    ,      
[houchangren@ebsdi-23260-oozie data]$ cat ../sed/test.sed   
1d
s:/usr/local/:/usr/lib/:g
p
=
[houchangren@ebsdi-23260-oozie data]$ sed -n -f ../sed/test.sed  hivepath.txt
/usr/lib/hive-0.7.1-cdh3u6/bin/hive
2
/usr/lib/hive-0.7.1-cdh3u6/bin/hive
3
/usr/lib/hive-0.7.1-cdh3u6/bin/hive
4
 

여러 명령 을 주소 범위 에 적용 합 니 다.
 
1 - 5 줄 같은 주소 범 위 를 지정 한 다음 여러 작업 을 수행 합 니 다.
 
[houchangren@ebsdi-23260-oozie data]$ head -n10 /etc/passwd > pwd.piece
[houchangren@ebsdi-23260-oozie data]$ cat pwd.piece
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:

[houchangren@ebsdi-23260-oozie data]$ sed -n -e'1,5{s:/bin/bash:/bin/sh:g;s/:/|/g;p}' pwd.piece
[houchangren@ebsdi-23260-oozie data]$ sed -n -e '1,5{s:/bin/bash:/bin/sh:g;s/:/|/g;p}' pwd.piece
root|x|0|0|root|/root|/bin/sh
bin|x|1|1|bin|/bin|/sbin/nologin
daemon|x|2|2|daemon|/sbin|/sbin/nologin
adm|x|3|4|adm|/var/adm|/sbin/nologin
lp|x|4|7|lp|/var/spool/lpd|/sbin/nologin
[houchangren@ebsdi-23260-oozie data]$
 
 
[houchangren@ebsdi-23260-oozie data]$ cat ../sed/pwd.sed
1,5{
s:/bin/bash:/bin/sh:g
s/:/|/g
p
}
[houchangren@ebsdi-23260-oozie data]$ sed -n -f ../sed/pwd.sed pwd.piece
root|x|0|0|root|/root|/bin/sh
bin|x|1|1|bin|/bin|/sbin/nologin
daemon|x|2|2|daemon|/sbin|/sbin/nologin
adm|x|3|4|adm|/var/adm|/sbin/nologin
lp|x|4|7|lp|/var/spool/lpd|/sbin/nologin
 

실례 적 인 예
 
   LINUX 와 DOS/Windows 시스템 의 일반 텍스트 형식의 줄 바 꾸 기 방식 은 다르다.이 스 크 립 트 는 유 닉 스 스타일 의 텍스트 를 DOS/windows 형식 으로 변환 합 니 다.DOS, windows 기반 텍스트 파일 은 줄 끝 에 CR (리 턴) 과 LF (줄 바 꿈) 가 있 고 UNIX 텍스트 는 줄 바 꿈 이 하나 밖 에 없다 는 것 을 알 수 있 습 니 다.어떤 유 닉 스 텍스트 를 옮 겨 야 할 수도 있 습 니 다.
Windows 시스템, 이 스 크 립 트 는 필요 한 형식 변환 을 실행 합 니 다.
>>> sed  -e  ‘s/$/\r/’myunix.txt > mydos.txt

 
 
    이 스 크 립 트 에서 '$' 규칙 표현 식 은 줄 의 끝 과 일치 합 니 다. '\r' 는 sed 에 게 그 전에 리 턴 을 삽입 하 라 고 알려 줍 니 다.
줄 을 바 꾸 기 전에 리 턴 을 삽입 하면 줄 마다 CR/LF 로 끝난다.
 
 
반면에 다운로드 한 네트워크 파일 은 dos/windows 파일 로 유 닉 스 작업 에 문제 가 있 습 니 다. 예 를 들 어 bash.dos/windows 형식의 텍스트 를 신뢰 할 수 있 는 유 닉 스 형식 으로 sed 호출 합 니 다.
>>> sed –e ‘s/.$//’ mydos.txt >myunix.txt

 
 
이 스 크 립 트 의 작업 원 리 는 매우 간단 합 니 다. 대체 규칙 표현 식 은 한 줄 의 마지막 문자 와 일치 하 며, 이 문 자 는 마침 리 턴 입 니 다.우 리 는 빈 문자 로 그것 을 교체 해서 출력 에서 완전히 삭제 했다.변경 스 크 립 트 를 사용 하고 출력 줄 의 마지막 문 자 를 삭 제 했 음 을 알 게 되면 유 닉 스 식 텍스트 파일 을 지정 합 니 다.
 
Sed 실천
 
요청:
1.      '소명' 의 이름 을 '이소 명' 으로 바꾸다.
2.      첫 세 줄 삭제
3.      5 - 10 줄 보이 기
4.      "제외"를 포함 하 는 줄 삭제
5.      모든 생일 이 Nov 와 Dec 사이 에 있 는 줄 보이 기
6.      모든 성 시작 줄, 앞 에 표시 * * *
7.      "수습 기간 인원"으로 "수습"을 포함 하 는 줄 을 교체 합 니 다.
8.      유 발명의 생일 1986/11/11
9.      모든 빈 줄 삭제
10.  스 크 립 트 를 작성 하고 첫 줄 을 Personnel File 에 삽입 하여 500 으로 끝 나 는 모든 월급 을 삭제 하고 파일 내용 을 표시 하 며 전화번호 와 생일 을 뒤 바 꾸 어 파일 의 끝 에 the end 를 추가 합 니 다.
11. '시용' 이 포 함 된 줄 의 이름 을 추출 한 다음, '시용 인원:' + name 으로 바 꿉 니 다.
데이터 내용:
[houchangren@ebsdi-23260-oozie data]$ cat persons.txt
  :010-68239343:    :1988/01/10:5000
  :010-68239343:    :1988/08/10:5000
   :010-68239343:    :1988/04/10:5000
 
 
   :010-68239343:     。:1988/10/10:500
   :010-68239343:    :1988/12/10:2000
   :010-68239343:    :1988/11/10:5340
 
 
   :010-68239343:    :1988/10/10:1000
   :010-68239343:    :1988/10/10:1000
   :010-68239343:    .:1988/10/10:200
 
 
    :
1.
[houchangren@ebsdi-23260-oozie data]$ sed -n -e 's:  :   :gp' persons.txt
   :010-68239343:    :1988/01/10:5000
2.
[houchangren@ebsdi-23260-oozie data]$ sed -e '1,3d' persons.txt
 
 
   :010-68239343:     。:1988/10/10:500
   :010-68239343:    :1988/12/10:2000
   :010-68239343:    :1988/11/10:5340
 
 
   :010-68239343:    :1988/10/10:1000
   :010-68239343:    :1988/10/10:1000
   :010-68239343:    .:1988/10/10:200
3.
   :010-68239343:     。:1988/10/10:500
   :010-68239343:    :1988/12/10:2000
   :010-68239343:    :1988/11/10:5340
 
4.
[houchangren@ebsdi-23260-oozie data]$ sed -e '/  /d' persons.txt
  :010-68239343:    :1988/01/10:5000
  :010-68239343:    :1988/08/10:5000
   :010-68239343:    :1988/04/10:5000
 
 
   :010-68239343:    :1988/12/10:2000
   :010-68239343:    :1988/11/10:5340
 
 
   :010-68239343:    :1988/10/10:1000
   :010-68239343:    :1988/10/10:1000
   :010-68239343:    .:1988/10/10:200
 
5.
[houchangren@ebsdi-23260-oozie data]$ sed -n '/[:::][0-9]*[:/:]1[1-2]/p' persons.txt
   :010-68239343:    :1988/12/10:2000
   :010-68239343:    :1988/11/10:5340
6.
[houchangren@ebsdi-23260-oozie data]$ sed -n 's/^ /*** /p' persons.txt
***   :010-68239343:    :1988/04/10:5000
 
7.
[houchangren@ebsdi-23260-oozie data]$ sed -e 's/^.*  .*$/     /g' persons.txt
  :010-68239343:    :1988/01/10:5000
  :010-68239343:    :1988/08/10:5000
   :010-68239343:    :1988/04/10:5000
 
 
   :010-68239343:     。:1988/10/10:500
   :010-68239343:    :1988/12/10:2000
   :010-68239343:    :1988/11/10:5340
 
 
   :010-68239343:    :1988/10/10:1000
   :010-68239343:    :1988/10/10:1000
     
 
8.
[houchangren@ebsdi-23260-oozie data]$ sed -n -e '/   /s/:[0-9]*\/.*\/.*:/:1986\/11\/11:/gp' persons.txt
   :010-68239343:    :1986/11/11:5340
9.
[houchangren@ebsdi-23260-oozie data]$ sed -e '/^$/d' persons.txt
  :010-68239343:    :1988/01/10:5000
  :010-68239343:    :1988/08/10:5000
   :010-68239343:    :1988/04/10:5000
   :010-68239343:     。:1988/10/10:500
   :010-68239343:    :1988/12/10:2000
   :010-68239343:    :1988/11/10:5340
   :010-68239343:    :1988/10/10:1000
   :010-68239343:    :1988/10/10:1000
   :010-68239343:    .:1988/10/10:200
 
10.
 
[houchangren@ebsdi-23260-oozie data]$ cat ../sed/person.sed
/500$/d
s/\(.*\)\(:.*:\)\(.*\)\(:.*:\)\(.*\)/\1\4\3\2\5/g
1i personnel file
$a the end
 
[houchangren@ebsdi-23260-oozie data]$sed  -f ../sed/person.sed persons.txt
personnel file
  :1988/01/10:    :010-68239343:5000
  :1988/08/10:    :010-68239343:5000
   :1988/04/10:    :010-68239343:5000
 
 
   :1988/12/10:    :010-68239343:2000
   :1988/11/10:    :010-68239343:5340
 
 
   :1988/10/10:    :010-68239343:1000
   :1988/10/10:    :010-68239343:1000
   :1988/10/10:    .:010-68239343:200
 
the end
 
11.
[houchangren@ebsdi-23260-oozie data]$ sed -n -e '/  /s/\(.*\):.*:.*:.*:.*/     :\1/gp' persons.txt | more
     :   

좋은 웹페이지 즐겨찾기