/ / ucieczki pojedynczych cudzysłowów w sed - bash, sed

unikanie pojedynczych cytatów w sed - bash, sed

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 № 1

Musisz 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