에 넣을 sed
수 있도록 명령을 찾으려고 합니다 . 이것은 두 개의 별도 파일입니다.filename
filename1
입력은 다음 filename
과 같습니다.
Cindy 11 22 54
Chester 48 12 84
입력은 다음 filename1
과 같습니다.
Name Class1 Class2 Class3
Lee 92 94 88
Chancy 91 85 95
Dora 99 77 96
Jefferry 84 98 90
이것이 내가 필요한 결과(출력)입니다.
Name Class1 Class2 Class3
Lee 92 94 88
Chancy 91 85 95
Dora 99 77 96
Cindy 11 22 54
Chester 48 12 84
Jefferry 84 98 90
명확히 해야 할 사항이 있으면 알려주시기 바랍니다. 기본적으로 Cindy와 Chester는 Dora와 Jeffrey 사이 어딘가에 있어야 합니다.
답변1
명령을 사용하여 의 모든 줄을 추가하려면 filename
다음을 수행할 수 있습니다.filename1
sed
sed r filename1 filename
그러나 결과는 귀하의 질문에 나온 결과와 약간 다를 수 있습니다. 즉, 다음과 같습니다.
Name Class1 Class2 Class3
Lee 92 94 88
Chancy 91 85 95
Dora 99 77 96
Jefferry 84 98 90
Cindy 11 22 54
Chester 48 12 84
편집하다
sed
이 질문에 유용한 추가 정보는 다음과 같습니다.
filename
4행 뒤에 다음을 추가합니다filename1
.sed '4 r filename' filename1
아래에
filename
"Dora"로 시작하는 줄을 추가하려면 다음을 수행하세요filename1
.sed '/^Dora/ r filename' filename1
filename
4행 뒤에 모든 빈 행을 추가하고 제거하려면 다음을 수행하십시오filename1
.sed '/^$/d;4 r filename' filename1
답변2
내 기억이 맞다면 순서가 없을 것이다.
이 경우:
$ cat file2 file1 | column -t
Name Class1 Class2 Class3
Lee 92 94 88
Chancy 91 85 95
Dora 99 77 96
Jefferry 84 98 90
Cindy 11 22 54
Chester 48 12 84
답변3
이렇게 하면:
sed r file1 file2
... 그런 다음 명명된 입력 파일의 각 입력 줄에 널 길이 파일 이름을 가진 ead 파일을 추가하려고 sed
시도하지만 실패합니다.r
file1
그리고file2
. 이 명령은 기본적으로 다음 명령과 다르지 않습니다.
sed '' file1 file2
...느린 점만 빼면요 r
.
이것이 내가 의미하는 바입니다:
seq 1 5 > file1
seq 6 10 > file2
strace sed r file[12]
...
write("1\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
write("2\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
write("3\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
write("4\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
write("5\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
read(3, "", 4096) = 0
close(3) = 0
open("file2", RDONLY) = 3
write("6\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
write("7\n", 21) = 2
...
open("" ...)
고장상황을 확인하세요ENOENT
쓰여진 모든 줄을 따르시겠습니까? 빈 r
ead 명령이 sed
실행되면 이런 일이 발생합니다. sed
사양은 r
스크립트에 지정된 존재하지 않는 ead 파일 에 대해 불평하지 않지만 r
파일을 읽으려고 시도하는 동안 아무 일도 일어나지 않은 것처럼 계속되므로 이러한 실패를 알 수 없습니다.
어쩌면 그럴지도것 같다하나의 파일을 다른 파일의 끝에 추가하고 싶기 때문에 작동 방식과 같습니다. cat
두 파일을 연결합니다. sed
기본적으로 두 개의 입력 파일 이름이 지정되면 첫 번째 파일을 읽은 다음 다음 파일을 읽습니다. 그러나 r
ead 명령이 작동하면 명명된 r
ead 파일이 완전히 추가됩니다.모든입력 라인.
이와 같이:
seq 3 > file
printf %s\\n a b c |
sed r\ file
a
1
2
3
b
1
2
3
c
1
2
3
한 파일의 내용을 다른 파일에 추가하려면 다음을 수행하세요.
cat < file2 >> file1
입력의 특정 지점 뒤에만 추가하려면 몇 가지 옵션이 있습니다. sed
안에:
sed -e '/match/{r file2' -e:n -e 'n;bn' -e \} file1
...거의 모든 작업에 사용할 수 있습니다 sed
.
또는 POSIX가 있는 경우 sed
:
{ sed /match/q; cat file2 -; } < file1
...더 효율적이겠죠.
두 가지 방법 모두 콘텐츠가file2
한 번만 읽고 in r
이 처음 발생한 직후에만 읽 습니다.match
file1
.
또 다른 방법은 다음과 같습니다.
cat file2 | sed /match/r\ /dev/fd/0 file1
...이것은 첫 번째 게임 이후 각 게임 후에 빈 길이의 파일을 읽습니다...