sed -i가 심볼릭 링크를 파일로 바꾸는 이유는 무엇입니까? [복사]

sed -i가 심볼릭 링크를 파일로 바꾸는 이유는 무엇입니까? [복사]

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의 확장으로 해석하는 것 같습니다.

관련 정보