소스 파일:
$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
자체적으로 /
문자를 대체 문자로 사용하므로 서로 충돌합니다.
이 문제를 해결하는 방법에는 두 가지가 있습니다.
sed
/
대체 문자를 입력 파일에 없는 다른 문자로 변경합니다.sed '2 s:^:echo test > /var/tmp/file\n:' infile
/
파일에 추가하려는 텍스트의 모든 문자를 이스케이프합니다.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