Замените путь другим путем с помощью sed - PullRequest
0 голосов
/ 03 декабря 2011

У меня есть файл со следующими строками:

some /foo/foo/foo some
some=/foo/foo/foo some
some /foo/foo/foo/ some
some=/foo/foo/foo/ some
some "/foo/foo/foo" some
some="/foo/foo/foo" some
some "/foo/foo/foo/" some
some="/foo/foo/foo/" some
some '/foo/foo/foo' some
some='/foo/foo/foo' some
some '/foo/foo/foo/' some
some='/foo/foo/foo/ some
some (/foo/foo/foo) some
some=(/foo/foo/foo) some

Как мне найти и заменить pathS на путь с 'frame', например:

some [p]/foo/foo/foo[;p] some
some=[p]/foo/foo/foo[;p] some
some [p]/foo/foo/foo/[;p] some
some=[p]/foo/foo/foo/[;p] some
some "[p]/foo/foo/foo[;p]" some
some="[p]/foo/foo/foo[;p]" some
some "[p]/foo/foo/foo/[;p]" some
some="[p]/foo/foo/foo/[;p]" some
some '[p]/foo/foo/foo[;p]' some
some='[p]/foo/foo/foo[;p]' some
some '[p]/foo/foo/foo/[;p]' some
some='[p]/foo/foo/foo/[;p] some
some ([p]/foo/foo/foo[;p]) some
some=([p]/foo/foo/foo[;p]) some

Я написал почти все примеры, если кто-то хотел задать подвопрос. Примечание: пути абсолютно произвольны. Я не знаю, каковы пути. Я должен только знать, что они должны быть заменены путем с 'frame'

Ответы [ 3 ]

2 голосов
/ 03 декабря 2011

Это также может работать:

 sed 's,/.*/[^")'\'' ]*,[p]&[;p],' file

Объяснение:

Использовать , в качестве разделителей команды s.Прикрепите регулярное выражение первым /.Затем используйте жадный *, чтобы проглотить все до последнего /.Снова используйте жадность *, чтобы захватить разделители.Затем поместите текст по обе стороны от сопоставленного регулярного выражения.Это также подчеркивает использование «пробивки дыры» в цитируемой команде для включения одинарной кавычки '\''.

1 голос
/ 03 декабря 2011

Вы упомянули:

Примечание: пути абсолютно произвольны.Я не знаю, что такое пути.

Я предполагаю, что путь должен быть в формате \w (az AZ 0-9 или _).тогда эта строка sed:

 sed -r 's#(/[a-zA-Z0-9_/]+)#[p]\1[;p]#g' yourFile

выполнит эту работу.

см. тест на вашем примере.(обратите внимание, что я сделал некоторые изменения на входе, чтобы сделать его " произвольным ")

kent$  cat t
some /foo/foo/fo3o some
some=/foo/foo/fdoo some
some /foo/foo/fxoo/ some
some=/foo/fofo/foo/ some
some "/foxo/foo/foo" some
some="/foo/ffoo/foo" some
some "/foo/foxo/foo/" some
some="/foo/f6oo/foo/" some
some '/foo/fo7o/foo' some
some='/foo/foo7/foo' some
some '/foxo/foo/foo/' some
some='/fo0o/f_oo/foo/ some
some (/foo/f99oox/foo) some
some=(/fo234o/fdoo/fd_oo) some'

kent$  sed -r 's#(/[a-zA-Z0-9_/]+)#[p]\1[;p]#g' t
some [p]/foo/foo/fo3o[;p] some
some=[p]/foo/foo/fdoo[;p] some
some [p]/foo/foo/fxoo/[;p] some
some=[p]/foo/fofo/foo/[;p] some
some "[p]/foxo/foo/foo[;p]" some
some="[p]/foo/ffoo/foo[;p]" some
some "[p]/foo/foxo/foo/[;p]" some
some="[p]/foo/f6oo/foo/[;p]" some
some '[p]/foo/fo7o/foo[;p]' some
some='[p]/foo/foo7/foo[;p]' some
some '[p]/foxo/foo/foo/[;p]' some
some='[p]/fo0o/f_oo/foo/[;p] some
some ([p]/foo/f99oox/foo[;p]) some
some=([p]/fo234o/fdoo/fd_oo[;p]) some'
0 голосов
/ 03 декабря 2011

Может быть, это может помочь:

[jaypal:~/Temp/tem] cat file
some /foo/foo/foo some
some=/foo/foo/foo some
some /foo/foo/foo/ some
some=/foo/foo/foo/ some
some "/foo/foo/foo" some
some="/foo/foo/foo" some
some "/foo/foo/foo/" some
some="/foo/foo/foo/" some
some '/foo/foo/foo' some
some='/foo/foo/foo' some
some '/foo/foo/foo/' some
some='/foo/foo/foo/ some
some (/foo/foo/foo) some
some=(/foo/foo/foo) some

[jaypal:~/Temp/tem] sed 's@/foo/foo/foo/\?@[p]&[;p]@' file
some [p]/foo/foo/foo[;p] some
some=[p]/foo/foo/foo[;p] some
some [p]/foo/foo/foo/[;p] some
some=[p]/foo/foo/foo/[;p] some
some "[p]/foo/foo/foo[;p]" some
some="[p]/foo/foo/foo[;p]" some
some "[p]/foo/foo/foo/[;p]" some
some="[p]/foo/foo/foo/[;p]" some
some '[p]/foo/foo/foo[;p]' some
some='[p]/foo/foo/foo[;p]' some
some '[p]/foo/foo/foo/[;p]' some
some='[p]/foo/foo/foo/[;p] some
some ([p]/foo/foo/foo[;p]) some
some=([p]/foo/foo/foo[;p]) some
[jaypal:~/Temp/tem] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...