두 줄 사이에 텍스트 삽입

두 줄 사이에 텍스트 삽입

다음 파이썬 파일이 있습니다

#!/usr/bin/env python
import sys, argparse
from pbsuite.utils.setupLogging import *
....

나는 그것을 다음과 같이 바꾸고 싶습니다 :

#!/usr/bin/env python
sys.path.append('/anaconda/conda-bld/pbsuite_1490823990330/_t_env/opt/pbsuite-15.8.24')
import sys, argparse
from pbsuite.utils.setupLogging import *

불행하게도 sed -i.bak '2 s|^.*$|sys.path.append(${OUTPUT})|g' a.py변수는 덮어쓰기 되어 해당 내용으로 대체되지 import sys, argparse않습니다 .$OUTPUT

#!/usr/bin/env python
sys.path.append(${OUTPUT})
from pbsuite.utils.setupLogging import *

Mac 및 Linux에서 이 문제를 해결하는 방법은 무엇입니까?

답변1

$ sed "2i\sys.path.append(\'/anaconda/conda-bld/pbsuite_1490823990330/_t_env/opt/pbsuite-15.8.24\')" file.py
#!/usr/bin/env python
sys.path.append('/anaconda/conda-bld/pbsuite_1490823990330/_t_env/opt/pbsuite-15.8.24')
import sys, argparse
from pbsuite.utils.setupLogging import *
....

이상한 솔루션

$ a="sys.path.append('/anaconda/conda-bld/pbsuite_1490823990330/_t_env/opt/pbsuite-15.8.24')"

$ echo $a
sys.path.append('/anaconda/conda-bld/pbsuite_1490823990330/_t_env/opt/pbsuite-15.8.24')

$ awk -v ins="${a}" 'NR==2{printf("%s\n",ins)}1' a.txt
#!/usr/bin/env python
sys.path.append('/anaconda/conda-bld/pbsuite_1490823990330/_t_env/opt/pbsuite-15.8.24')
import sys, argparse
from pbsuite.utils.setupLogging import *
....

답변2

sed -i.bak -e "1G;s|\n|&sys.path.append('/anaconda/conda-bld/pbsuite_1490823990330/_t_env/opt/pbsuite-15.8.24')|" yourpyfile

ed -s yourpyfile <<\cmd
1a
sys.path.append('/anaconda/conda-bld/pbsuite_1490823990330/_t_env/opt/pbsuite-15.8.24')
.
wq
cmd

답변3

${OUTPUT}이것은 리터럴을 형성하기 위해 작은 따옴표를 사용하는 쉘 인용 문제에 가깝습니다 .

$ export OUTPUT="a test"
$ echo 'bla blah ${OUTPUT} blah'
bla blah ${OUTPUT} blah
$ echo 'blah blah '"${OUTPUT}"' blah'                   
blah blah a test blah
$ 

'blah blah '${OUTPUT}' blah'위의 큰따옴표 버전과 미묘한 차이가 있지만 올바르게 보일 수도 있습니다 .

답변4

귀하의 경우 이 두 줄 사이에 줄을 추가하려면 먼저 변경해야 합니다.작은따옴표를 큰따옴표로 변환, 그러면 sed쉘 변수가 있고 다음과 같은 것을 사용한다는 것을 이해하게 될 것입니다.

사이의 공백을 참고하세요.1그리고a\sys.path.append(${OUTPUT})매우 중요.

sed -i.bak "1 a\sys.path.append(${OUTPUT})" a.py

관련 정보