2012-05-23 6 views

답변

10

2에서 단계 :

content=$(cat file.txt) # no cat abuse this time 
echo -en "foobar\n$content" >file.txt 
+1

여전히'cat'을 피할 수 있습니다 : 'content = "$ (

+0

@MarkReed는 bash에서 작동하지만 재미있는 제안은 dash가 아닙니다. 나는 이것이'

+0

이 방법으로 내용을 설정하면 마지막 줄 바꿈을 포함하여 파일의 모든 공백을 무시합니다. –

6

이 비표준입니다,하지만 나오지 지원하는 -i 경우 수행 할 수 있습니다

sed -i '1i\ 
Foobar' file.txt 
+0

\이 필요 없다고 생각합니다. '1i Foobar'가 효과가있다. – dogbane

+0

@dogbane 이스케이프 된 개행을 생략하면 일부 sed에서 작동하지만 전부는 아닙니다. 그것이 사라지면 많은 sed가 질식합니다. –

3

나는 간단하게 것입니다. 가장 쉬운 아마도 가장 빠른 해결책은 간단하다 :

(echo "Foobar"; cat file.txt) >tmpfile 
cp tmpfile file.txt 
rm tmpfile 

을가 "MV"에 의해 "CP"를 대체, 그 file.txt를의 아이 노드 변경 문제가되지 않는 경우. Unix 파일 시스템의 의미론은 파일에 대한 선행을 지원하지 않고 추가 만 지원하기 때문에 이보다 훨씬 빠른 해결책은 불가능합니다.

+1

cp와 remove가 아니라'mv tmpfile.txt file.txt'가 아닌가? –

+0

'만약'file.txt'의 inode가 변경되지 않는다면, "cp"를 "mv"로 대체하십시오. –

+1

inode가 얼마나 자주 변경 되나요? –

관련 문제