Как сократить все до определенного слова / после находки в сценарии

Linux под ключ походит на что-то, что выполняет Ваш список требований. Конкретно Вы захотите смотреть на версии веб-разработки. Существует 2 типа, Платформа и Стек.

Также Вы могли бы хотеть просмотреть список livecdlist.com. Это датировано, но все еще имеет несколько дистрибутивов, перечисленных, которые являются активными и процветающими. Не позволяйте датам отпугнуть Вас, они просто не усовершенствовали их.

3
27.10.2015, 03:47
4 ответа

Инструмент basename может снять путь перед именем файла.

find /home/user/logfilesError/ -maxdepth 1 -type f -name "gandalf_*"\
-daystart -mtime -1 -exec grep -rl "ERROR" "{}" + | xargs -n 1 basename

выдаст желаемый результат.

-n 1 говорит xargs, что нужно использовать ровно один аргумент для имени файла. Таким образом, если он получит больше, то породит один процесс basename на каждый аргумент. Это необходимо, так как basename принимает в качестве аргумента только одно имя файла.

Эта команда НЕ будет работать, если имена файлов содержат пробелы. В этом случае, как предлагает @HaukeLaging, используйте :

find /home/user/logfilesError/ -maxdepth 1 -type f -name "gandalf_*"\
-daystart -mtime -1 -exec grep -rl "ERROR" "{}" + | xargs -n 1 -d \\n basename

Это не сработает, если имена ваших файлов содержат новые строки.

.
2
27.01.2020, 21:19

Если ./gandalf_123.log вам подходит, то вы можете использовать

find /home/user/logfilesError/ -maxdepth 1 -type f -name "gandalf_*"\
  -daystart -mtime -1 -execdir grep -rl "ERROR" "{}" +

Иначе я бы пропустил выход grep, например. sed, чтобы удалить ненужную часть:

> echo /home/user/logfilesError/gandalf_123.log |
  sed 's+.*/++'
gandalf_123.log
1
27.01.2020, 21:19

можно использовать sed:

... | sed -e 's=.*/=='

, что позволяет заменить что-либо до / ничем.

Также можно использовать cut, но он не может считать справа, поэтому его нужно комбинировать с rev:

... | rev | cut -d/ -f1 | rev
1
27.01.2020, 21:19

это можно сделать с помощью

 echo ${str##*/}

, которая обрезает строку слева направо до последнего '/'

> str=/home/user/logfilesError/gandalf_123.log
> echo ${str##*/}
gandalf_123.log
0
27.01.2020, 21:19

Теги

Похожие вопросы