최근에 저는 sed
구성 파일에 대한 작업을 수행하고 있었습니다. 명령이 매개변수와 sed
다르게 동작하는 것을 발견했습니다.-ir
-ri
[root@node system]# sed -ri 's|(^[[:space:]]+[Kk]ernel.*$)|\1 transparent_hugepage=never|' temp_file
[root@node system]# echo $?
0
[root@node system]# sed -ir 's|(^[[:space:]]+[Kk]ernel.*$)|\1 transparent_hugepage=never|' temp_file
sed: -e expression #1, char 60: invalid reference \1 on `s' command's RHS
[root@node system]# echo $?
1
답변1
옵션은 입력 파일을 내부에서 편집할 때 파일을 백업하는 데 사용되는 파일 이름 접미사인 옵션 인수를 -i
사용합니다 . sed
GNU의 경우 sed
이 옵션 인수는 선택 사항이지만 제공되면 분명히 사용됩니다.
Use는 파일 이름이 입력 파일의 원래 이름이어야 하며 접미사로 문자가 추가되어야 함을 백업 파일에 -ir
알려줍니다 . 지금은 사용되지 않으므로 패턴에 그룹이 없기 때문에 표현식의 대체 부분에 있는 역참조가 더 이상 유효한 것으로 인식되지 않습니다 (기본 정규 표현식을 사용하여 패턴의 일부를 캡처하는 방법).sed
r
-r
\( ... \)
한마디로 sed -ri
와 같지 않습니다 sed -ir
.