Jestem nowy w sed, i potrzebuję chwycić tylko nazwę pliku od wyjścia find
. Potrzebuję znaleźć wyjściową całą ścieżkę dla innej części mojego skryptu, ale chcę wydrukować nazwę pliku bez ścieżki. Muszę również dopasować zaczynając od początku linii, a nie od końca. Po angielsku, chcę dopasować pierwszą grupę znaków kończącą się ".txt" niezawierającą "/". Oto moja próba, która nie działa:Używanie sed do pobrania nazwy pliku z pełnej ścieżki?
[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
oto wyjście chcę:
two.txt
one.txt
Ok, więc rozwiązania oferowane odpowiedział na moje pierwotne pytanie, ale myślę, że poprosił go źle. Nie chcę zabijać reszty linii poza sufiksem pliku, którego szukam. Tak więc, aby być bardziej jasne, jeśli następuje:
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'
Co chcę jest:
bash$ new_mp3s=\`find mp3Dir -type f -name \*.mp3\` && cp -rfv $new_mp3s dest | sed ???
`one.mp3' -> `/dest'
`two.mp3' -> `/dest'
Przepraszamy za zamieszanie. Moje oryginalne pytanie dotyczyło tylko pierwszej części tego, co próbuję zrobić.
2-ty edit: oto co mam wymyślić:
DEST=/tmp && cp -rfv `find /mp3Dir -type f -name \*.mp3` $DEST | sed -e 's:[^\`].*/::' -e "s:$: -> $DEST:"
To nie jest całkiem to, czego chcę, choć. Zamiast ustawiania katalogu docelowego jako zmiennej powłoki, chciałbym zmienić pierwszą operację sed
, aby zmieniała tylko dane wyjściowe cp
przed "->" w każdym wierszu, dzięki czemu nadal będę mieć drugą część danych wyjściowych cp
działają z innym "-e".
3-ty edit: I nie zorientowali to jeszcze tylko przy użyciu sed regex, ale następujące spełnia swoje zadanie przy użyciu Perl:
cp -rfv `find /mp3Dir -type f -name \*.mp3` /tmp | perl -pe "s:.*/(.*.mp3).*\`(.*/).*.mp3\'$:\$1 -> \$2:"
Chciałbym to zrobić w sed chociaż.
I jego przyjaciel, dirname. Byłoby wspaniale, gdybyś pokazał działający przykład, który wykorzystuje szczegóły podane w pytaniu. –
Nigdy nie słyszałem o basename i cieszę się, że wiem o tym teraz, ale miałem nadzieję na jakąś pomoc z sed regex. –