Регулярное выражение с sed - PullRequest
1 голос
/ 04 июня 2010

Мне трудно выбрать из файла регулярное выражение. Я пытаюсь заменить определенный текст в файле, который заполнен такими строками.

/ home / пользователь / test2 / data / train / train38.wav /home/user/test2/data/train/train38.mfc

Я пытаюсь заменить жирный текст. Проблема в том, что я не знаю, как выбрать только текст, выделенный полужирным шрифтом, так как мне нужно использовать .wav в моем регулярном выражении, а имя файла и расположение файла также будут другими.

Надеюсь, вы можете помочь

С уважением, Jökull

Ответы [ 4 ]

1 голос
/ 01 мая 2011

sed обрабатывает строки по одной за раз, поэтому вы можете опустить глобальный параметр, и он будет изменять только первый «поезд» в каждой строке

sed 's/train/FOO/' testdat

против

sed 's/train/FOO/g' testdat

которая является глобальной заменой

Это немного более читабельно и менее подвержено ошибкам, чем некоторые другие возможности, но, конечно, есть приложения, которые не будут упрощаться так же легко.

1 голос
/ 04 июня 2010

Предполагается, что вы хотите заменить строку между двумя двумя косыми чертами в первом пути.

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

производит:

/home/user/test2/data/FOO/train38.wav /home/user/test2/data/train/train38.mfc
0 голосов
/ 01 мая 2011

Вы можете сделать это так

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

\< указывает, что sed соответствует началу этой работы, а \> указывает, что оно соответствует концу слова.

g в конце означает глобальный, поэтому он выполняет сопоставление и замену всей строки и не останавливается после первого успешного сопоставления, как это обычно происходит без g.

0 голосов
/ 01 мая 2011
sed 's;\(\(/[^/]\+\)*\)/train\(\(/[^/]\+\)*\)\.wav;\1/FOO\3.wav;'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...