W pliku test.py
który brzmi:
#!/usr/bin/env python
import os
import glob
for f in glob.glob("*.txt"):
print f
... Chciałbym programowo zastąpić:
glob.glob("*.txt")
... z:
glob.glob("*.txt")+glob.glob("*.dat")
za pomocą sed
.
Próbowałem:
sed -i "s,glob.glob("*.txt"),glob.glob("*.txt")+glob.glob("*.dat"),g" test.py
... nie zastępuje to jednak ciągu. Mam przeczucie, że ma to związek z użyciem pojedynczych cudzysłowów w łańcuchu do zastąpienia i / lub interpretacji różnych znaków cudzysłowu w samej powłoce (bash). Co jest nie tak?
Odpowiedzi:
2 dla odpowiedzi № 1Musisz uciec od wszystkich specjalnych meta znaków regularnych, takich jak .
lub *
we wzorze wyszukiwania.
Możesz użyć podwójnych cudzysłowów w sed
dowództwo. Użyj również &
w zastępstwie, aby uniknąć ponownego powtarzania dopasowanego tekstu.
sed "s/glob.glob("*.txt")/&+glob.glob("*.dat")/" test.py
#!/usr/bin/env python
import os
import glob
for f in glob.glob("*.txt")+glob.glob("*.dat"):
print f