开发者

Regular expression with sed

I'm having hard time selecting from a file using a regular expression. I'm trying to replace a specific text in the file which is full of lines like this.

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

I'm trying to replace the bolded text. The problem is the i don't know how to select only the bolded text since i need to use .wav in my regexp 开发者_运维百科and the filename and the location of the file is also going to be different.

Hope you can help

Best regards, Jökull


This assumes that what you want to replace is the string between the last two slashes in the first path.

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

produces:

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


sed processes lines one at a time, so you can omit the global option and it will only change the first 'train' on each line

sed 's/train/FOO/' testdat

vs

sed 's/train/FOO/g' testdat

which is a global replace

This is quite a bit more readable and less error-prone than some of the other possibilities, but of course there are applications which will not simplify quite as readily.


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


You can do it like this

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

The \< tells sed to match the beginning of that work and the \> tells it to match the end of the word.

The g at the end means global so it performs the match and replace on the entire line and does not stop after the first successful match as it would normally do without g.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜