什么是从输入中提取路径/文件名的有效Awk / Nawk模式?

时间:2012-03-25 00:31:34

标签: regex string bash awk

输入包含分散在各处的文件名(/path/to/file)。 我只想要/path/to/xyz.xyz(空格或换行符,但永远不要' [' [文件中的空格])。

规则是:

  • 以' /'开头 - 开始
  • 结束于' ' (但不是' \')或' \ n'
  • 介于两者之间的一切。

仅附加路径+基本名称。不是基地名。

3 个答案:

答案 0 :(得分:2)

以下

{
  r = 0;
  s = $0;
  do
  {
    r = match(s, /\/([^ ]|\\ )+/ );
    if ( r > 0 )
    {
      print substr(s, RSTART, RLENGTH);
      s = substr(s, RSTART + RLENGTH);
    }
  }
  while ( r > 0 );
}

也许就是你想要的。 (注意:由于+而未捕获路径“/”,如果使用*,则会捕获它。)

答案 1 :(得分:0)

您可以依靠awk进行拆分,以便文件名不包含空格,然后只需查找以/开头的任何字段:

awk '{ for (i = 1; i <= NF; i++) if (substr($i, 1, 1) == "/") print $i }'

答案 2 :(得分:0)

$ txr -c '@(freeform)
@(coll)@{path /\/[^ \n]*/}@(end)' -
asfasdf /foo/bar asdfasdf/xyzzy.gif /blah
/usr/local/bin .2466 /etc
[Ctr-D][Enter]
path[0]="/foo/bar"
path[1]="/xyzzy.gif"
path[2]="/blah"
path[3]="/usr/local/bin"
path[4]="/etc"

这会转储原始绑定,允许整个命令在Bash中eval编辑以创建数组。 (没有要求输出格式。)