find, xargs, 파이프

1660 단어 shell
질문: 이 폴 더 의 모든 P *. txt 파일 에서 string 2 로 string 1 을 바 꾸 려 면 셸 명령 을 입력 하 십시오: find. name "P *. txt"| sed - i 's/string 1/string 2/' 를 입력 하 십시오. 원 하 는 결 과 를 얻 지 못 했 습 니 다.그래서 파이프 의 원리 와 find, xargs 의 공동 사용 방식 을 간단하게 알 아 보 았 습 니 다.
1. 파이프 가 무엇 입 니까?
이전 프로그램의 표준 입력 을 다음 프로그램의 표준 입력 으로 하 는 것 을 말한다.
메모: 1) 파이프 명령 은 이전 명령 의 정확 한 출력 만 처리 하고 오류 출력 은 처리 하지 않 습 니 다.
        2) 파이프 명령 오른쪽 명령 은 표준 입력 스 트림 명령 을 받 아야 합 니 다.
find 명령 은 터미널 (표준 출력) 에서 찾 은 파일 을 출력 합 니 다.sed 의 표준 입력 은 파일 이름 을 포함 하 는 텍스트 입 니 다.
~/Desktop/test$:ls
P1.txt  P2.txt
test 폴 더 아래 P1. txt, P2. txt 두 개의 파일 이 있 습 니 다. 각 파일 의 내용 은 "string 1"이 고 find. name "P *. txt"의 표준 출력 은 화면 에 인쇄 됩 니 다.
~/Desktop/test$:find . -name "P*.txt"
./P2.txt
./P1.txt
그래서 sed 는 파일 이름 을 처리 하 는 것 이지 파일 안의 텍스트 를 처리 하 는 것 이 아니다.
~/Desktop/test$:find . -name "P*.txt" | sed -n 's/P/S/p'
./S2.txt
./S1.txt

xargs 는 이전 프로그램의 표준 출력 을 다음 프로그램의 명령 행 인자 로 바 꿉 니 다.
그래서 find. - name "P *. txt"를 되 돌려 줍 니 다./P2. txt,./P1. txt. 는 find. - name "P *. txt"| xargs sed - n 's/string 1/string 2/p' 의 다음 명령 은 실제 sed - n 's/string 1/string 2/p' P1. txt P2. txt 입 니 다. 즉, 파일 이름 이 아 닌 파일 을 처리 합 니 다.
~/Desktop/test$:find . -name "P*.txt" | xargs sed -n 's/string1/string2/p'
string2
string2
마찬가지 로 우 리 는 grep 명령 을 사용 할 수 있다.
~/Desktop/test$:find . -name "P*.txt" | grep 'P'
./P2.txt
./P1.txt
상하 양자 의 차 이 를 비교한다.
~/Desktop/test$:find . -name "P*.txt" | xargs grep 'string1'
./P2.txt:string1
./P1.txt:string1

좋은 웹페이지 즐겨찾기