正则表达式与sed

时间:2010-06-04 15:58:30

标签: regex linux sed

我很难用正则表达式从文件中进行选择。我正在尝试替换文件中充满这样的行的特定文本。

/ home / user / test2 / data / train /train38.wav /home/user/test2/data/train/train38.mfc

我正在尝试替换粗体文字。问题是我不知道如何只选择粗体文本,因为我需要在我的正则表达式中使用.wav,文件名和文件的位置也会有所不同。

希望你能帮忙

祝你好运, Jökull

4 个答案:

答案 0 :(得分:1)

这假定您要替换的是第一个路径中最后两个斜杠之间的字符串。

sed 's|\([^/]*/\)[^/]*\(/[^/]* .*\)|\1FOO\2|' filename

产生

/home/user/test2/data/FOO/train38.wav /home/user/test2/data/train/train38.mfc

答案 1 :(得分:1)

sed一次处理一行,因此您可以省略全局选项,它只会更改每行的第一个“列车”

sed 's/train/FOO/' testdat

VS

sed 's/train/FOO/g' testdat

这是全球替代

这比其他一些可能性更具可读性且更不容易出错,但当然有些应用程序不会那么简单。

答案 2 :(得分:0)

sed 's;\(\(/[^/]\+\)*\)/train\(\(/[^/]\+\)*\)\.wav;\1/FOO\3.wav;'

答案 3 :(得分:0)

你可以这样做

sed -e 's/\<train\>/plane/g'

\<告诉sed匹配该作品的开头,\>告诉它匹配单词的结尾。

最后的g表示全局,因此它会执行匹配并替换整行,并且在第一次成功匹配后不会像通常没有g那样停止。