Regex / grep, чтобы найти путь к файловой системе глубины X - PullRequest
0 голосов
/ 10 апреля 2011

Мне нужно выражение / grep / sed / любое выражение, которое будет соответствовать

"F:\vol2\home\USERNAME" /grant ... 

и не совпадают ни с чем подобным

"F:\vol2\home\USERNAME\subfolder" /grant ...
"F:\vol2\subfolder\subfoler2" /grant ...
"F:\vol2\home" /grant

Очевидно, что «USERNAME» является переменной и должна рассматриваться как таковая. Я думал что-то вроде «home \\ [A-Za-z] * [^ \\]», но это, очевидно, не работает.

Ответы [ 4 ]

1 голос
/ 11 апреля 2011
awk -F '\\' -v user=USERNAME 'NF==4 && $3=="home" && $4 ~ "^"user'

разделение на обратную косую черту, должно быть 4 поля, третье - "home", а четвертое начинается с user variable

1 голос
/ 10 апреля 2011
awk '/home\\[^\\]+\"/{print $1}'

кажется, работает.

В Perl это тоже работает:

while (<>) {
  print if (/\"F:\\vol2\\home\\[^\\]+\"/);
}
0 голосов
/ 11 апреля 2011

Если ваши пути всегда являются первым полем,

awk '$1~/home\\[^\\]+\"/{print $1}'

Или вы можете разбить первое поле на \ и проверить количество токенов, равное 4

$ ruby -ane 'puts $F[0] if $F[0].split("\\").size==4 && /home/' file
"F:\vol2\home\USERNAME"
0 голосов
/ 10 апреля 2011

grep '\ vol2 \ home \' $ {USERNAME} '"' x2

...