输入包含分散在各处的文件名(/path/to/file
)。
我只想要/path/to/xyz.xyz
(空格或换行符,但永远不要' [' [文件中的空格])。
规则是:
仅附加路径+基本名称。不是基地名。
答案 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
编辑以创建数组。 (没有要求输出格式。)