我写了一行找到并返回所需文件的完整路径。输出如下:
/home/ke/Desktop/b/o/r/files.txt:am.torrent
/home/ke/Desktop/y/u/n/u/s/files.txt:asd.torrent
我必须像这样修改输出:
bor
yunus
我该怎么做?
提前致谢。
答案 0 :(得分:1)
这应该适合你:
your_script.sh | sed 's,.*Desktop,,' | sed 's,[^/]*$,,' | sed s,/,,g
或者,甚至更好:
your_script.sh | sed 's,.*Desktop,,;s,[^/]*$,,;s,/,,g'
答案 1 :(得分:0)
用sed。 echo '/home/ke/Desktop/b/o/r/files.txt:am.torrent' | sed -e 's+/++g' -e 's/^.*Desktop//' -e 's/files.txt:.*$//'
。这是一个相当简单的解决方案,我相信还有更好的解决方案。
答案 2 :(得分:0)
我求助于awk:
BEGIN { FS="/" }
{
for(i=1;i<NF;i++)
if (length($i) == 1)
a[NR]=a[NR]""$i
}
END {
for (i in a)
print a[i]
}
像这样使用它:
$ awk -f script.awk input
bor
yunus
或者如果您的数据包含在变量中:
$ awk -f script.awk <<< $data
答案 3 :(得分:0)
它不是一个很好/整洁的解决方案,但bash参数扩展是一个强大的工具。所以无法抗拒提供一个例子
[]l="/home/ke/Desktop/b/o/r/files.txt:am.torrent"
[]m=${l##*Desktop/}
[]n=${m%%/files.txt*}
[]k=${n//\//}
[]echo $m
b/o/r/files.txt:am.torrent
[]echo $n
b/o/r
[]echo $k
bor
你可以看到bash如何在不使用任何外部程序的情况下逐步替换变量(btw []
是PS1,提示)
还有很多方法可以做到这一点。我在写第一篇
[]l="/home/ke/Desktop/b/o/r/files.txt:am.torrent"
[]m=${l/*Desktop\//}
[]n=${m/\/files.txt*/}
[]k=${n//\//}
[]echo $m
b/o/r/files.txt:am.torrent
[]echo $n
b/o/r
[]echo $k
bor
再试一次,