명령 줄을 사용하여 텍스트 파일 맨 위에 줄을 삽입하려면 어떻게합니까?


25

기존 파일의 맨 위에 텍스트를 삽입하고 싶습니다. 이것을 어떻게 달성 할 수 있습니까? 내가 노력 echo하고tee 있지만 실패했습니다.

상단에 레포 라인을 삽입하려고했습니다. sources.list터미널에서 파일 .

노트

다른 답변의 방법이 이미 알려 졌기 때문에 한 줄 빠른 솔루션이 필요합니다.


1
tee는 파일의 맨 아래에 줄을 추가합니다. 예를 들어 echo "deb http://extras.ubuntu.com/ubuntu precise main" | sudo tee -a /etc/apt/sources.list관리자 권한을 얻으려면 tee 앞에 sudo가 필요합니다. 그러나 왜 지구상에서 source.list의 맨 위에 무언가를 추가하고 싶습니까?
Savvas Radevic 2016 년

2
@medigeek : 당신이 / 설치는 CD-REPO에서 업데이트에 대해 뭔가를 찾을 수있는 OP의 질문 역사에 어딘가에 ... 난 ... 그 이유가있을 수 있습니다 의심

@izx에게 감사드립니다. 귀하의 가정은 정확합니다. 조용히 감동합니다. 당신은 또한 그 질문에 대답 할 수 있습니까? 소프트웨어 센터를 사용하여 로컬 리포지토리에서 설치하고 맨 위에 배치하지 않고 로컬 리포지토리를 우선 순위로 설정하는 것입니다. 다시 감사합니다.
Anwar

1
@izx, 로컬 리포지토리에 우선 순위를 설정 하는 방법에 대한 링크 입니다. 소프트웨어 센터에 대한이 질문을 확인할 수 있다면 기쁠 것 입니다. 첫 의견에 다시 한번 감사드립니다. 매우 기뻤습니다.
Anwar

1
@medigeek, 당신 은 그런 드문 질문에 대한 설명을 위해이 질문 을 볼 수 있습니다 .
Anwar

답변:


38

실제로 다음과 sed같이 쉽습니다 .

  • sed -i -e '1iHere is my new top line\' filename

  • 1ised에게 파일의 1 행에 나오는 텍스트를 삽입하라고 지시합니다. \기존 줄 1이 줄 2로 이동되도록 끝에 줄 바꿈을 잊지 마십시오 .


1
감사. 참고 사항 : 교체하려는 경우 si in 대신 대신 삽입하십시오 1i.
Anwar

3
슬프게도 이것은 비어있는 파일에 실패합니다 (주행이 없으므로 sed는 절대 삽입하지 않습니다).
티노

@Tino 빈 파일은 그냥 사용할 수 있습니다echo "Text Here" >> Filename
Flotolk

MacOS 10에서는 작동하지 않습니다
Krishna

7

스크립트와 장소에 일반 편집으로 까다 롭습니다,하지만 당신은 사용할 수 있습니다 echocat다음과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를 사용하는 경우 실제로 이것을 풀고 싶지 않기 때문에 오류를 감지하기 위해 유효성 검사 및 방탄 기능을 추가해야합니다. 그러나 그것은 별도의 질문입니다 :-)


이미 할 수 있습니다. izx가 제공 한대로 한 줄 솔루션이 필요합니다. 그러나 귀하의 답변에 감사드립니다.
Anwar

1
@AnwarShah-아 죄송합니다! 당신은 당신의 질문에 말했다 :-)
Sean

귀하의 답변과 의견에 +1을 인정합니다. (더 이상 줄 수 없습니다)
Anwar

6
./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

5

그리고 그것을 위해 진정한 텍스트 편집기를 사용하지 않는 이유는 무엇입니까? 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무엇입니까?
vp_arth

1
@vp_arth 컨텐츠가 가변적 인 first_line경우 : ed -s filename < <(printf '%s\n' 1i "$first_line" . wq). 변수가 단일 점으로 확장되지 않고 개행 문자가 포함되어 있지 않은지 확인하십시오 (따라서 사용자 입력에서 오는 경우 소독).
gniourf_gniourf

3

항상 awk옵션이 있습니다. 대체 string당신의 내용으로 변수를. 그러나 이것은 현재 위치 변경이 아닙니다. 개인적으로는 제자리에서 변경하지 않는 경향이 있습니다. 이것은 분명히 개인적인 취향입니다. 두 가지, -vawk의 변수를 나타내며 변수 n는 효과적으로 줄 번호를 일치시키는 데 사용됩니다 NR == 1. nand 의 값을 변경하여 여러 가지 방법으로이를 사용할 수 있습니다 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

2

Ex 모드에서 Vim을 사용할 수 있습니다 :

ex -sc '1i|hello world' -cx sources.list
  1. 1 첫 번째 줄을 선택하십시오

  2. i 줄 바꿈 삽입

  3. x 저장하고 닫습니다


지금까지 제공된 다른 솔루션보다 훨씬 간단합니다. 고맙습니다.
Pothi Kalimuthu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.