Обратитесь к этой странице (RPi Легкая Установка SD-карты) для получения дополнительной информации об установке НОВИЧКОВ и Rasp Pi. Эта страница имеет много деталей для различных горящих сценариев, слишком многочисленных для списка здесь.
Попробуйте:
echo "/mnt/VPfig/Amer/AR4/Celtel/files/COM.txt" | sed 's|^/[^/]*||'
, что дало мне:
/VPfig/Amer/AR4/Celtel/files/COM.txt
Ищет первые /
, за которыми следует как можно больше не/
s, а затем заменяет их пустой строкой.
В оболочке POSIX:
$ x='/mnt/VPfig/Amer/AR4/Celtel/files/COM.txt'
$ printf "/%s\n" "${x#/*/}"
/VPfig/Amer/AR4/Celtel/files/COM.txt
Объяснение
Расширение параметра $ {x # / * /}
удаляет ведущий компонент пути с двумя /
, окружающими его, и printf
закрепляет ведущий /
обратно.
Самый простой способ - удалить самую короткую строку, состоящую из символов, отличных от /
, из начала строки.
В большинстве языков регулярных выражений []
- это класс символов, который соответствует чему-либо в квадратных скобках. [abc]
будет соответствовать либо a
, либо b
, либо c
. [^]
- это инвертированный символьный класс, соответствующий чему угодно, кроме символов в нем. Таким образом, [^ /] *
будет соответствовать самой длинной строке символов, отличных от /
. ^
в начале регулярного выражения приводит к совпадению только в начале входной строки. Комбинируя их, вы можете:
$ echo "/mnt/VPfig/Amer/AR4/Celtel/files/COM.txt" | sed 's/^\/[^/]*//'
/VPfig/Amer/AR4/Celtel/files/COM.txt
Или вы можете установить разделитель полей ввода awk на /
и вывести все, кроме последнего поля:
$ echo "/mnt/VPfig/Amer/AR4/Celtel/files/COM.txt" |
awk -F/ '{for(i=3;i<=NF;i++){printf "/%s",$i};print ""}'
Или вы можете использовать некоторые уловки Perl:
$ echo "/mnt/VPfig/Amer/AR4/Celtel/files/COM.txt" |
perl -F/ -lane 'print "/",join "/",@F[2..$#F]'
/VPfig/Amer/AR4/Celtel/files/COM.txt
или, лучшая уловка Perl , предложенная @Joseph R. :
$ echo "/mnt/VPfig/Amer/AR4/Celtel/files/COM.txt" | perl -pe
perl -pe 's{^/.*?(?=/)}{}'
или даже просто:
$ echo "/mnt/VPfig/Amer/AR4/Celtel/files/COM.txt" | perl -pe 's#/[^/]+/#/#'
/VPfig/Amer/AR4/Celtel/files/COM.txt
Наконец, вы также можете использовать мощь регулярных выражений Perl с grep
:
$ echo "/mnt/VPfig/Amer/AR4/Celtel/files/COM.txt" | grep -oP '/[^/]+?\K/.*'
/VPfig/Amer/AR4/Celtel/files/COM.txt