
다음 파일 삽입 방법은 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
,p
w
q
답변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
그러면 마지막 줄을 제외한 모든 항목이 표시되고 그 다음에 cat
는 inserted_file.txt
의 마지막 줄이 표시됩니다 first_file.txt
.