sed, 마지막 줄 앞에 파일 삽입

sed, 마지막 줄 앞에 파일 삽입

다음 파일 삽입 방법은 sed마지막 줄 이전에도 작동했지만 더 이상은 작동하지 않습니다. 현재 버그인가요 sed?

sed를 사용한 파일 삽입 방법 데모:

mkdir /tmp/test
printf '%s\n' {1..3} > /tmp/test/f1
printf '%s\n' {one,two,three,four,five,six,seven,eight,nine,ten} > /tmp/test/f2

$ cat /tmp/test/f2 | sed -e "/nine/r /tmp/test/f1" -e //N
one
two
three
four
five
six
seven
eight
1
2
3
nine
ten

$ head -9 /tmp/test/f2 | sed -e "/nine/r /tmp/test/f1" -e //N
one
two
three
four
five
six
seven
eight
nine
1
2
3

$ cat /tmp/test/f2 | sed -e "/ten/r /tmp/test/f1" -e //N
one
two
three
four
five
six
seven
eight
nine
ten
1
2
3

$ sed --version
GNU sed version 4.2.1
... 

즉, line 메소드 앞에 파일을 삽입하는 것은 마지막 라인을 제외한 모든 곳에서 작동합니다. 이전에는 작동 중이었습니다. 현재 버그인가요 sed?

감사해요

답변1

당신이 켜져 있기 때문에 gnu sed당신은 사용할 수 있습니다

'e [COMMAND]'
     This command allows one to pipe input from a shell command into
     pattern space.

la $t 라인에서:

sed '$e cat insert.txt' file

사용 ed( 제자리에서 편집하려면 ,p다음으로 교체):w

ed -s file<<IN
- r insert.txt
,p
q
IN

또는

ed -s file <<< $'-1 r insert.txt\n,p\nq\n'

ed읽을 때 file현재 주소는 la $t 라인으로 설정됩니다. -(또는 -1)는 현재 주소를 (즉 $-1) 앞의 한 줄로 설정하고 현재 줄 뒤의 내용을 r읽습니다 . 텍스트 버퍼의 내용을 인쇄하고(앞서 말했듯 이 변경 사항을 저장하려면 다음으로 바꾸십시오) 편집기를 종료합니다.insert.txt,pwq

답변2

귀하의 의견에 따르면 "해야 합니다.마지막 라인과의 경기$"이므로 에서 (마지막 줄) 및 i(삽입 명령) 을 사용하는 것이 좋습니다 sed. 예를 들면 다음과 같습니다.

sed '$ i\INSERT BEFORE LAST LINE' number.txt
1
2
3
4
INSERT BEFORE LAST LINE
5

파일의 마지막 줄에 빈 줄이 없고 제대로 작동하는지 확인하세요. 달러 기호와 i뒤에 있는 백슬래시( \) 사이의 공백을 확인하세요 i. 그러면 마지막 줄에 대한 필요 없이 백슬래시 뒤의 텍스트가 마지막 줄에 삽입됩니다 /pattern/.

참고: 이 명령은 파일이 아닌 마지막 줄 앞에 텍스트 한 줄만 추가합니다. 마지막 줄 앞에 파일 내용을 삽입하려는 경우.

전체 파일을 추가하고 싶은 경우(파일이 없으면 그렇지 않은 경우 sed) 다음을 사용합니다.

    head -n-1 first_file.txt && cat inserted_file.txt && tail -n1 first_file.txt 

그러면 마지막 줄을 제외한 모든 항목이 표시되고 그 다음에 catinserted_file.txt의 마지막 줄이 표시됩니다 first_file.txt.

관련 정보