명령 줄에서 파일의 두 번째 줄에 어떻게 쓸 수 있습니까?


29

출력 파일을 생성하는 외부 프로그램이 있습니다 (약 20K 줄 가능).

기존 줄 1과 줄 2 사이에 새 줄을 삽입해야합니다. awk와 sed를 살펴 봤습니다. 각 줄마다 하나의 라이너를 사용하지만 올바른 스위치를 만들 수 없었습니다. 이 작업을 수행.

답변:


20
awk 'NR==1{print; print "new line"} NR!=1'

12
조금 더 짧은 :awk 'NR==2 {print "new line"} 1'
glenn jackman

@glennjackman : 귀하의 버전이 내 시스템에서 작동하지 않지만 대답은 작동합니다. 특히, 당신과 함께, 라인 2가 복제되고 새로운 라인이 두 라인 사이에 삽입됩니다 (라인 3).
Nikana Reklawyks 2014

두 번째 줄에서 쓰기를 시작하고 모든 후속 줄을 덮어 쓰는 방법이 있습니까?
CMCDragonkai

@CMCDragonkai 나는 당신이 무엇을 요구하는지 잘 모르겠습니다. 지정된 파일의 첫 번째 줄과 두 번째 줄을 인쇄하십시오. 첫 줄과 파일 내용? 첫 번째 파일의 첫 번째 줄과 첫 번째 파일의 나머지 줄마다 두 번째 파일의 줄? 원하는 것을 매우 구체적으로 설명하고 비교적 짧지 만 완전한 예를 사용하여 새로운 질문을 할 수 있습니다.
Kevin

16

구체적인 경우에는이 방법이 더 간단해야합니다.

sed '1 { P ; x }' your-file

설명 : 1 행 에서 다음을 수행하십시오.

  1. P는 선을 RINT
  2. E x 패턴 공간을 유지 공간으로 변경 (기본적으로 버퍼 비우기)

그런 다음 사이클의 일부로 라인 (지금 비어 있음)이 다시 인쇄됩니다.


줄 바꿈 문자 대신 새 줄 을 추가하려면 (처음 이해 한 것) 다음 명령을 사용하십시오 (추가).seda\

sed '1 a\
appended line' your-file

또는

sed '1 aappended line' your-file

appended line1 행 다음 에 " "를 추가 합니다.


1
sed -i '1 a\\' file그냥 줄 바꿈.
forcefsck

1
@forcefsck 예, 두 번째 '1 aapended line'예로 GNUism이라는 단점 만 있습니다.
angus

8

나는 추측 sed방법은 다음과 같습니다

sed '2 i whatever_line_of_text_you_wanted_to_INSERT' filename.txt

그러면 텍스트가 파일의 두 번째 줄로 들어가고 파일에서 실제 두 번째 줄이 세 번째 줄이됩니다.

사용하여, 그 주 추가 모드를 가 될이 있다면, 그것은 줄 번호가 언급 한 후 APPEND가 발생하기 때문에, 첫 번째 라인을 사용했다.

sed '1 a whatever_line_of_text_you_wanted_to_INSERT' filename.txt



2

이것은 당신을 위해 일할 수 있습니다 :

sed 1G file

something줄 바꿈 뒤에 삽입하려면 다음을 수행하십시오.

sed '1{G;s/$/something/}' file

또는 핸들을 sed 한 경우 \n:

sed '1s/$/\nsomething/' file

물론 a더 쉽다 :

sed '1a something' file

죄송합니다. 어떻게해야합니까?
Nikhil Mulley

그것은 1 행 다음에 개행을 삽입합니다
potong

1
또는 줄 바꿈 \n에 줄 바꿈 을 추가하십시오 !
potong

1

나는 보통 ed이것을 위해 사용 합니다 :

(echo 1a; echo 'Line to insert'; echo .; echo w) | ed - filename

A와 유사 sed솔루션,하지만 탈출 줄 바꿈의 혼란없이.


2
당신은 약간의 여유가있을 echo특히 아래의를 bash: ed - filename <<< $'1a\nLine to insert\n.\nw'.
manatwork

1
모든 dash시스템 에서 작동하지는 않습니다 (예 : 많은 시스템의 경우) /bin/sh.
Arcege

1
그래서 나는“당신은 일부를 절약 할 수 있습니다”라고 썼습니다 echo. 스페어 링 모든 echo 의는 참으로 bash단지 기능 만 감소 echo4 1 일부터 카운트를 dash하고 ksh너무 : echo '1a\nLine to insert\n.\nw' | ed - filename.
manatwork

1
또는을 사용printf %s\\n 하면 매 인수마다 줄 바꿈을하고 삽입하려는 줄에 포함 된 특수 문자를 망치지 않습니다. 또한 ed언제 ex사용할 수 있습니까?
와일드 카드

1

파이썬 솔루션

python -c "import sys; lines = sys.stdin.readlines(); lines.insert(1,'New Line\n'); print ''.join(lines).strip()" < input.txt

0

사용 sedANSI 이스케이프 코드 및 (Bash 전용) :

# note: \ --> \\
printf '%s\n' 1 2 3 4 5 | sed -e $'1 { s/\\(.*\\)/\\1\\\ninserted line/; }'

0

나는 이것을 위해 파이썬을 사용할 것이다.

import fileinput

for linenum,line in enumerate(fileinput,FileInput("file",inplace=1)):
    if linenum ==1:
          print ""
          print line.rstrip() 
      else: 
          print line.rstrip()`

0

나는 명시 적 카운터를 사용하는 것을 좋아합니다.

awk '(c==1) {print "new line"} (c!=1) {print $0} {c++}' file

0

가장 간단한 방법의 사용 printfex:

printf '%s\n' 1a 'my line to insert' . x | ex file

1a"첫 줄 뒤에 추가"를 의미합니다. .첨부 는 끝; x저장 및 종료를 의미합니다.


0

위의 답변 중 어느 것도 원본 파일에 변경 사항을 저장하는 방법에 대해 언급하지 않았으므로 OP가 요청한 것으로 생각합니다.

내가 페이지에 갔을 때 확실히 필요한 것입니다.

파일이 호출되었다고 가정하면 output.txt

sed -i '1 a This is the second line' output.txt

내 특별한 사용 사례는 xsl 스타일 시트 선언을 junit xml 파일에 자동으로 추가하는 것입니다.

sed -i '1 a <?xml-stylesheet type="text/xsl" href="junit-html.xsl"?>' junit.xml

yourownlinux.com/2015/04/… 는 sed에 대한 잘 작성된 소개의 관련 부분입니다.
chim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.