서마리
GNU 문법 :
sed '/claudio/{s//claudia/;:p;n;bp}' file
또는 (교체 할 단어를 한 번만 사용하려면)
sed '/\(claudi\)o/{s//\1a/;:p;n;bp}' file
또는 POSIX 구문에서 :
sed -e '/claudio/{s//claudia/;:p' -e 'n;bp' -e '}' file
어떤 나오지도, 과정에 대한 작품 에만 첫 번째를 찾기 위해 필요한만큼 여러 선으로 claudio
, 경우에도 작동 claudio
첫 번째 줄에 있고 그것은 단지 하나의 정규식 문자열을 사용으로 짧습니다.
세부 묘사
만 변경하려면 한 줄 당신이해야 할 선택 만 한 줄.
1,/claudio/
(질문에서)를 사용하여 다음을 선택합니다.
- 첫 번째 줄에서 (무조건)
- 받는 다음 문자열을 포함 라인
claudio
.
$ cat file
claudio 1
antonio 2
claudio 3
michele 4
$ sed -n '1,/claudio/{p}' file
claudio 1
antonio 2
claudio 3
선택하려면 모든 포함 라인을 claudio
사용합니다 :
$ sed -n `/claudio/{p}` file
claudio 1
claudio 3
파일 에서 첫 번째 claudio
파일 만 선택 하려면 다음을 사용하십시오.
sed -n '/claudio/{p;q}' file
claudio 1
그런 다음 해당 라인에서만 대체 할 수 있습니다.
sed '/claudio/{s/claudio/claudia/;q}' file
claudia 1
이것은 정규식과 일치하는 첫 번째 줄 에서 두 개 이상이있을지라도 줄 에서 첫 번째 정규 표현식 일치 만 변경합니다 .
물론 /claudio/
정규 표현식을 다음과 같이 단순화 할 수 있습니다.
$ sed '/claudio/{s//claudia/;q}' file
claudia 1
그런 다음 누락 된 유일한 것은 다른 모든 행을 수정하지 않고 인쇄하는 것입니다.
sed '/claudio/{s//claudia/;:p;n;bp}' file
info sed
: (0,/REGEXP/
: 0의 행 번호가 같은 주소 명세서에서 사용 할 수있다0,/REGEXP/
즉, 그래서sed
너무 첫 번째 입력 라인에서 정규 표현식을 일치하려고합니다 즉.0,/REGEXP/
입니다 유사한1,/REGEXP/
, ADDR2 입력 0의 최초의 행과 일치하는 경우, / REGEXP / 형태의 범위를 끝까지 고려할 1 반면 / REGEXP은 / 형태의 범위의 시작과 일치하고, 따라서 다양한 범위를 만들 것을 제외 정규 표현식 의 두 번째 발생 까지 )