我是新来的sed,需要抓取find
的输出文件名。我需要为我的脚本的另一部分查找输出的完整路径,但我只想打印没有路径的文件名。我也需要匹配从行开始开始,而不是从最后开始。在英文中,我想匹配第一组以“.txt”结尾且不包含“/”的字符。这是我尝试不工作:使用sed从完整路径抓取文件名?
[email protected]:~$ find /home/ryan/Desktop/test/ -type f -name \*.txt
/home/ryan/Desktop/test/two.txt
/home/ryan/Desktop/test/one.txt
[email protected]:~$ find /home/ryan/Desktop/test/ -type f -name \*.txt | sed s:^.*/[^*.txt]::g
esktop/test/two.txt
ne.txt
这是我想要的输出:
two.txt
one.txt
好了,所以提供的解决方案回答我原来的问题,但我想我问它错了。我不想杀掉通过我正在搜索的文件后缀的行的其余部分。 所以,为了更清楚,如果以下:
bash$ new_mp3s=\`find mp3Dir -type f -name \*.mp3\` && cp -rfv $new_mp3s dest
`/mp3Dir/one.mp3' -> `/dest/one.mp3'
`/mp3Dir/two.mp3' -> `/dest/two.mp3'
我要的是:
bash$ new_mp3s=\`find mp3Dir -type f -name \*.mp3\` && cp -rfv $new_mp3s dest | sed ???
`one.mp3' -> `/dest'
`two.mp3' -> `/dest'
很抱歉的混乱。我原来的问题刚刚涵盖了我想要做的第一部分。
2日编辑: 这里就是我想出来的:
DEST=/tmp && cp -rfv `find /mp3Dir -type f -name \*.mp3` $DEST | sed -e 's:[^\`].*/::' -e "s:$: -> $DEST:"
这不是完全是我想虽然。我不想将目标目录设置为shell变量,而是想要更改第一个sed
操作,以便它仅在每行上的“ - >”之前更改cp
输出,以便我仍然将cp
输出的第二部分输出为与另一个'-e'一起操作。
3日编辑: 使用我还没有想通了这一点只有SED正则表达式的还,但下面不会使用Perl的作业:
cp -rfv `find /mp3Dir -type f -name \*.mp3` /tmp | perl -pe "s:.*/(.*.mp3).*\`(.*/).*.mp3\'$:\$1 -> \$2:"
我想做到这一点在SED虽然。
和它的朋友,dirname。如果您展示了一个使用问题中提供的详细信息的工作示例,那将会很棒。 – 2009-07-25 02:32:06
我从来没有听说过基地名称,我很高兴我现在知道它,但我希望有一些sed正则表达式的帮助。 – 2009-07-25 04:47:17