sed -i
심볼릭 링크에 편집 내용을 적용할 때 이상한 동작을 발견했습니다. 문서에는 -i
내부 편집이 있을 것이라고 나와 있습니다. 그러나 심볼릭 링크는 파일로 대체됩니다.
재현 단계:
cd /tmp
echo blah > foo
ln -s foo bar
sed -i -e 's/ah/ub/' bar
ls -l
결과는 다음과 같습니다.
-rw-rw-r--. 1 arogge arogge 5 Mar 9 15:07 bar
-rw-rw-r--. 1 arogge arogge 5 Mar 9 15:07 foo
이는 예상된 동작입니까, 아니면 버그입니까 sed
?
답변1
이는 예상된 동작입니다.
-i
/플래그는 --in-place
파일의 임시 복사본을 편집한 다음 복사본을 원본 파일 위로 이동합니다.
그래서 당신이 할 때 :
sed -i 'bla' symlink
sed가 하는 일은 다음과 같습니다:
sed 'bla' symlink > temp_file
mv temp_file symlink
따라서 해당 위치에 일반 파일을 배치하여 심볼릭 링크를 끊습니다.
다음에서 가져온 정보코멘트존재하다sed -i가 심볼릭 링크를 깨는 것을 방지하는 방법은 무엇입니까?
답변2
전체 목록에 다음과 같은 내용이 포함되어 있습니까?
lrw-rw-r--. 1 arogge arogge 5 Mar 9 15:07 bar-e -> foo
이는 예상된 동작입니다. sed 매뉴얼 페이지에서
-i 확장
파일을 제자리에서 편집하고 지정된 확장자로 백업을 저장합니다.
sed는 -e를 -i의 확장으로 해석하는 것 같습니다.