파일의 지정된 줄에 명령줄 정보를 삽입합니다.

파일의 지정된 줄에 명령줄 정보를 삽입합니다.

소스 파일:

$cat test.file 
aaa
bbb
ccc

두 번째 행에 삽입하고 싶은데 echo test> /var/tmp/file원하는 결과는 다음과 같습니다.

$ cat test.file 
aaa
echo test > /var/tmp/file
bbb
ccc

다음을 시도했지만 실패했습니다 :(

$ sed -i "2 s/^/echo test > /var/tmp/file\n/" test.file                                          
sed: -e expression #1, char 20: unknown option to `s'

$ sed -i "2 s/^/"echo test > /var/tmp/file"\n/" test.file 
-bash: /var/tmp/file\n/: Is a directory

답변1

노력하다:

sed '2i echo test > /var/tmp/file' infile

2i두 번째 줄에 텍스트를 삽입한다고 말합니다.


자신만의 솔루션도 작동해야 하지만 텍스트에 /추가하려는 내용이 있고 sed자체적으로 /문자를 대체 문자로 사용하므로 서로 충돌합니다.

이 문제를 해결하는 방법에는 두 가지가 있습니다.

  1. sed /대체 문자를 입력 파일에 없는 다른 문자로 변경합니다.

    sed '2 s:^:echo test > /var/tmp/file\n:' infile
    
  2. /파일에 추가하려는 텍스트의 모든 문자를 이스케이프합니다.

    sed '2 s/^/echo test > \/var\/tmp\/file\n/' infile
    

-i결과가 만족스러우면 내부 대체를 위한 스위치를 명령에 추가하십시오.

sed -i '2 s/^/echo test > \/var\/tmp\/file\n/' infile

답변2

이렇게 하면 문자를 이스케이프 처리할 필요가 없습니다. 파일 읽기 명령은 r지정된 줄 번호 뒤(이 경우 Iine #1 뒤)에 파일 내용을 배치합니다.

$ echo 'echo test > /var/tmp/file' \
| sed -i '1r /dev/stdin' file

관련 정보