我是新來的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