逃避sed中的单引号

时间:2017-03-22 10:08:50

标签: bash sed

在文件var arr = ["abc=0","def=2","ghi=3","jkl=6","mno=9"]; function searchStringInArray (str, strArray) { for (var j=0; j<strArray.length; j++) { if (strArray[j].match(str)) return j; } return -1; } var pos_of_ghi = searchStringInArray("ghi", arr ); var pos_of_mno = searchStringInArray("mno", arr ); if(pos_of_ghi ==-1){ alert("ghi not found") } else{ alert("pos_of_ghi="+pos_of_ghi); } if(pos_of_mno ==-1){ alert("mno not found") } else{ alert("pos_of_mno="+pos_of_mno); }中显示:

test.py

...我想以编程方式替换:

#!/usr/bin/env python import os import glob for f in glob.glob('*.txt'): print f

... with:

glob.glob('*.txt')使用glob.glob('*.txt')+glob.glob('*.dat')

我试过了:

sed

...但是这不会取代字符串。我有一种预感,这与在字符串中使用单引号来替换和/或解释shell本身中的各种引号(bash)有关。出了什么问题?

1 个答案:

答案 0 :(得分:2)

您需要在搜索模式中转义所有特殊的正则表达式元字符,例如.*

您可以在sed命令中使用双引号。同时使用&代替,以避免再次重复匹配的文字。

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