我很难用正则表达式从文件中进行选择。我正在尝试替换文件中充满这样的行的特定文本。
/ home / user / test2 / data / train /train38.wav /home/user/test2/data/train/train38.mfc
我正在尝试替换粗体文字。问题是我不知道如何只选择粗体文本,因为我需要在我的正则表达式中使用.wav,文件名和文件的位置也会有所不同。
希望你能帮忙
祝你好运, Jökull
答案 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
那样停止。