여러 파일에서 중복된 텍스트 줄을 제거하고 있습니다. 내가 사용하려는 명령은
sed -i 's/set autologout=10//g' /home/$x/.login
실행하면 이런 오류가 뜹니다
sed: -I or -i may not be used with stdin
옵션 없이 명령이 성공적으로 실행되지만 -i
저장되지는 않습니다. 각 서버에서 계정당 2개의 파일을 수정하고 있기 때문에 이 스크립트를 작성하고 있습니다. 보기 흉한 예외를 사용하여 코딩할 수 있지만 저장할 수는 없습니다.
답변1
@don_crissti의 의견은 다음과 같은 사실을 나타냅니다.BSD sed 것 같습니다필요하다논쟁-i
, -e
사용되지 않는 경우 첫 번째 인수를 sed
명령으로 사용합니다. 이렇게 하면 입력 파일에 대해 아무것도 남지 않으며(기본값) stdin
파일을 "현재 위치"에서 편집할 수 없습니다.
이는 다음과 같은 말과 반대이다.-i
선택적 매개변수 가 있는 GNU sed.
즉, 매개변수를 백업 파일에 사용되는 확장자 로 sed
해석할 수도 있습니다 . 따라서 백업 파일을 유지하지 않으려면 이 옵션에 빈 인수를 제공하면 됩니다.s/set autologout=10//g
-i
-i
sed -i "" 's/set autologout=10//g' /home/$x/.login
답변2
POSIX 솔루션의 경우 Ex 모드에서 Vim을 사용할 수 있습니다.
ex -sc '%s/set autologout=10//g|x' /home/"$x"/.login
%
모든 행 선택|
명령 구분 기호x
변경된 경우(변경된 경우) 파일에 쓰고 종료합니다."$x"
이 경우 인용되지 않은 변수는 좋지 않습니다.