LINUX.ORG.RU
ФорумAdmin

Удалить путь в начане строки

 


1

1

Добрый день . Помогите пожалуйста или посоветуйте толковый ресурс по sed ... Где есть четкое описание синтаксиса . Честно говоря уже голову сломал пытаясь понят абракадабру.

Если не сложно есть find /root/test -name «*.htm» | sed -e 's/.htm$//g' как добавить сюда удаление например /home/test/

Понимаю что меня уже пинали за подобные вопросы но реально с альтернативами сложно ... со скриптами на «Вы»

Ответ на: комментарий от Gotf

спасибо сейчас по ковыряюсь честно говоря лазил по интернету а тупо в man как-то не подумал...

neogenik
() автор топика
Ответ на: комментарий от shrub

Честно говоря у меня вообще как-то туго с пониманием sed ... проще было бы вспомнить и написать на с++ . Путаюсь в куче переменных

neogenik
() автор топика
Ответ на: комментарий от emulek

та это взрыв мозга что можно что " {} и тд и тп

neogenik
() автор топика

| xargs -L1 basename

bl ★★★
()

Обязательно sed?

https://www.google.ru/search?q=bash remove path

http://stackoverflow.com/questions/125281/how-do-i-remove-the-file-suffix-and...

$ x="/foo/fizzbuzz.bar"
$ y=${x%.bar}
$ echo ${y##*/}
fizzbuzz

(не проверял)

UPD: наверно это лучше: http://stackoverflow.com/questions/370047/what-is-the-most-elegant-way-to-rem...

sin_a ★★★★★
()
Последнее исправление: sin_a (всего исправлений: 1)

Попробуй ещё покурить man basename, может быть, для удаления пути (а заодно и расширения) лучше использовать его, а не париться с sed'ом?

OldManClone ★★
()
Ответ на: комментарий от sin_a

Вообще, наверно проще так:

$ VAR=(`echo /path/to/file/name.png | tr / " "`)
$ N=$(( ${#VAR[@]} - 1 ))
$ echo "file is: ${VAR[$N]}"
file is: name.png
sin_a ★★★★★
()

Помогите пожалуйста или посоветуйте толковый ресурс по sed ... Где есть четкое описание синтаксиса . Честно говоря уже голову сломал пытаясь понят абракадабру.

Для простых вещей рекомендую использовать встроенные средства bash: http://www.opennet.ru/docs/RUS/bash_scripting_guide/x4171.html

Описание синтаксис регулярных выражений в доступной форме описано здесь: http://ru.wikipedia.org/wiki/Регулярные_выражения

Но, читая wiki, ты должен помнить, что есть нюансы. Вот два главных их них:

1. Помни, про спец. символы, которые интерпретируются bash, да и самим sed.

Например, вот это не сработает:

$ echo 'This > is \ cool $A' | sed s/>/X/g
, так как '>' - управляющий символ bash. А вот эти три сработают:
$ echo 'This > is \ cool $A' | sed s/\>/X/g
$ echo 'This > is \ cool $A' | sed "s/>/X/g"
$ echo 'This > is \ cool $A' | sed 's/>/X/g'

Кое-что интерпретируется в двойных кавычках. Вот это не сработает:

$ echo 'This > is \ cool $a' | sed "s/$a/X/g"
а нужно вот так:
$ echo 'This > is \ cool $a' | sed "s/\$a/X/g"
$ echo 'This > is \ cool $a' | sed 's/$a/X/g'

Еще интересней с обратной чертой, которая интерпретируется как bash, так и sed. Не работает:

$ echo 'This > is \ cool $A' | sed s/\/X/g
$ echo 'This > is \ cool $A' | sed s/\\/X/g
$ echo 'This > is \ cool $A' | sed "s/\\/X/g"
$ echo 'This > is \ cool $A' | sed 's/\/X/g'
Работает:
$ echo 'This > is \ cool $A' | sed "s/\\\\/X/g"
$ echo 'This > is \ cool $A' | sed 's/\\/X/g'

Рекомендации как уберечься от ошибок:
1) старайся заключать регулярные выражения в одинарные кавычки (кроме случаев, когда ты знаешь, что тебе нужно другое)
2) если регулярное выражение не работает - экспериментируй с экранированием.

2. Помни про разные подвиды синтаксиса регулярных выражений: perl, POSIX и т. п.; в принципе, в wiki в конце это написано.

Например, из wiki у тебя вот так не получится:

$ echo 'Number 9' | sed 's/\d/X/g'
Зато получится вот так:

$ echo 'Number 9' | sed 's/[0-9]/X/g'
$ echo 'Number 9' | sed 's/[[:digit:]]/X/g'

Для примера, в grep можно переключать режимы; сравни вывод этих двух команд:

echo 'Number 9' | grep '\d'
echo 'Number 9' | grep -P '\d'

Рекомендации как уберечься от ошибок: аккуратно использовать символьные классы и всякие фигурные скобки.

В остальном читай wiki и пробуй.

Hope this helps.

Kroz ★★★★★
()
Последнее исправление: Kroz (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.