기존 파일의 맨 위에 텍스트를 삽입하고 싶습니다. 이것을 어떻게 달성 할 수 있습니까? 내가 노력 echo
하고tee
있지만 실패했습니다.
상단에 레포 라인을 삽입하려고했습니다. sources.list
터미널에서 파일 .
노트
다른 답변의 방법이 이미 알려 졌기 때문에 한 줄 빠른 솔루션이 필요합니다.
기존 파일의 맨 위에 텍스트를 삽입하고 싶습니다. 이것을 어떻게 달성 할 수 있습니까? 내가 노력 echo
하고tee
있지만 실패했습니다.
상단에 레포 라인을 삽입하려고했습니다. sources.list
터미널에서 파일 .
다른 답변의 방법이 이미 알려 졌기 때문에 한 줄 빠른 솔루션이 필요합니다.
답변:
실제로 다음과 sed
같이 쉽습니다 .
sed -i -e '1iHere is my new top line\' filename
1i
sed에게 파일의 1 행에 나오는 텍스트를 삽입하라고 지시합니다. \
기존 줄 1이 줄 2로 이동되도록 끝에 줄 바꿈을 잊지 마십시오 .
s
i in 대신 대신 삽입하십시오 1i
.
echo "Text Here" >> Filename
스크립트와 장소에 일반 편집으로 까다 롭습니다,하지만 당신은 사용할 수 있습니다 echo
및 cat
다음과mv
echo "fred" > fred.txt
cat fred.txt t.txt >new.t.txt
# now the file new.t.txt has a new line "fred" at the top of it
cat new.t.txt
# can now do the rename/move
mv new.t.txt t.txt
그러나 sources.list를 사용하는 경우 실제로 이것을 풀고 싶지 않기 때문에 오류를 감지하기 위해 유효성 검사 및 방탄 기능을 추가해야합니다. 그러나 그것은 별도의 질문입니다 :-)
./prepend.sh "myString" ./myfile.txt
그 알려져 prepend
있습니다 내 사용자 정의 쉘 :
#!/bin/sh
#add Line at the top of File
# @author Abdennour TOUMI
if [ -e $2 ]; then
sed -i -e '1i$1\' $2
fi
상대 경로 또는 절대 경로를 사용하면 정상적으로 작동합니다.
./prepend.sh "my New Line at Top" ../Documents/myfile.txt
이것을위한 영구적 인 스크립트를 원한다면, nano /etc/bash.bashrc
파일의 끝에이 함수를 추가하십시오 :
function prepend(){
# @author Abdennour TOUMI
if [ -e $2 ]; then
sed -i -e '1i$1\' $2
fi
}
터미널을 다시 열고 즐기십시오.
prepend "another line at top" /path/to/my/file.txt
그리고 그것을 위해 진정한 텍스트 편집기를 사용하지 않는 이유는 무엇입니까? ed 는 표준 텍스트 편집기입니다.
ed -s filename <<< $'1i\nFIRST LINE HERE\n.\nwq'
또는 명령을 더 읽기 쉽게하려면 다음을 수행하십시오.
ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)
1
: firstline으로 이동i
: 삽입 모드.
: 삽입을 중지하고 일반 모드로 돌아갑니다.wq
: 쓰기와 종료, 감사합니다.FIRST LINE
무엇입니까?
first_line
경우 : ed -s filename < <(printf '%s\n' 1i "$first_line" . wq)
. 변수가 단일 점으로 확장되지 않고 개행 문자가 포함되어 있지 않은지 확인하십시오 (따라서 사용자 입력에서 오는 경우 소독).
항상 awk
옵션이 있습니다. 대체 string
당신의 내용으로 변수를. 그러나 이것은 현재 위치 변경이 아닙니다. 개인적으로는 제자리에서 변경하지 않는 경향이 있습니다. 이것은 분명히 개인적인 취향입니다. 두 가지, -v
awk의 변수를 나타내며 변수 n
는 효과적으로 줄 번호를 일치시키는 데 사용됩니다 NR == 1
. n
and 의 값을 변경하여 여러 가지 방법으로이를 사용할 수 있습니다 s
.
string="My New first line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}' file.source > file.target
예:
% cat file.source
First Line
Second Line
Third Line
% string="Updated First Line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}' file.source > file.target; cat ./file.target !698
Updated First Line
First Line
Second Line
Third Line
Ex 모드에서 Vim을 사용할 수 있습니다 :
ex -sc '1i|hello world' -cx sources.list
1
첫 번째 줄을 선택하십시오
i
줄 바꿈 삽입
x
저장하고 닫습니다
echo "deb http://extras.ubuntu.com/ubuntu precise main" | sudo tee -a /etc/apt/sources.list
관리자 권한을 얻으려면 tee 앞에 sudo가 필요합니다. 그러나 왜 지구상에서 source.list의 맨 위에 무언가를 추가하고 싶습니까?