파일에서 텍스트를 제거하고 열지 않고 저장

파일에서 텍스트를 제거하고 열지 않고 저장

여러 파일에서 중복된 텍스트 줄을 제거하고 있습니다. 내가 사용하려는 명령은

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
  1. %모든 행 선택

  2. |명령 구분 기호

  3. x변경된 경우(변경된 경우) 파일에 쓰고 종료합니다.

  4. "$x"이 경우 인용되지 않은 변수는 좋지 않습니다.

관련 정보