Удалить строки с определенным шаблоном [закрыто]

Я хочу удалить строку с определенным шаблоном.

-rw-rw-r-- 1 user1 user1   10 Oct 27 10:08 ./folder1/folder2/test-file1-228783-cause1-XY-OP-0001.pdf
-rw------- 1 user1 user1    0 Oct 27 11:17 ./folder1/folder2/.test-file1-228783-cause1-XY-OP-0001.pdf.lyWfRr
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:12 ./folder1/folder2/test-file2-228651-cause1-XY-OP-0001.pdf
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:08 ./folder1/folder2/test-file3-228706-cause1-XY-OP-0005.pdf
-rw------- 1 user1 user1    0 Oct 27 11:19 ./folder1/folder2/.test-file3-228706-cause1-XY-OP-0005.pdf.GftyJL
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:15 ./folder1/folder2/test-file4-228695-cause1-XY-OP-0005.pdf
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:15 ./folder1/folder2/test-file5-228675-cause1-XY-OP-0001.pdf

Из приведенного выше набора строк, хотите удалить строку ниже

-rw------- 1 user1 user1    0 Oct 27 11:17 ./folder1/folder2/.test-file1-228783-cause1-XY-OP-0001.pdf.lyWfRr
-rw------- 1 user1 user1    0 Oct 27 11:19 ./folder1/folder2/.test-file3-228706-cause1-XY-OP-0005.pdf.GftyJL

Не могли бы вы сообщить мне, как это сделать.

Спасибо

0
задан 27 October 2017 в 21:39

3 ответа

Из вашего вывода видно, что вы выполнили команду

$ ls -la ./folder1/folder2/

или что-то похожее по строкам, и ваш вопрос просит проанализировать вывод ls. Тем не менее, вы действительно не должны анализировать ls , потому что это плохая практика по нескольким причинам. Лучший подход был бы следующим:

$ ls ./folder1/folder2/{"",.}test*pdf

Расширение пути будет захватывать только те файлы, которые начинаются с test и заканчиваются на pdf и могут начинаться или не начинаться с точки. Ваши файлы, оканчивающиеся на lyWfRr и GftyJL, не будут отображаться таким образом.


Однако, если вы настаиваете на анализе этого вывода, используйте якорь $ в awk, чтобы отфильтровать строки, заканчивающиеся только в .pdf

$ awk '/pdf$/' input.txt                                                                                                                                               
-rw-rw-r-- 1 user1 user1   10 Oct 27 10:08 ./folder1/folder2/test-file1-228783-cause1-XY-OP-0001.pdf
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:12 ./folder1/folder2/test-file2-228651-cause1-XY-OP-0001.pdf
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:08 ./folder1/folder2/test-file3-228706-cause1-XY-OP-0005.pdf
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:15 ./folder1/folder2/test-file4-228695-cause1-XY-OP-0005.pdf
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:15 ./folder1/folder2/test-file5-228675-cause1-XY-OP-0001.pdf

Для записи Я не одобряю это, призываю пользователей избегать парсинга ls и делать все правильно TM

0
ответ дан 27 October 2017 в 21:39

Хотя текущие ответы являются действительными, они могут быть проблематичными, если вы приступаете к работе с очень большим объемом файла (более 30 КБ). В этом случае я предлагаю использовать вместо поиска:

find ./folder1/folder2 -maxdepth 0 -type f -name ".test-file*-*-cause1-XY-OP-*.pdf.*" -delete

РЕДАКТИРОВАТЬ: я предполагаю, что вы хотите удалить файлы, а не обновлять содержимое файла. В этом случае использование sed, awk или grep - единственный вариант, и поэтому вам следует избегать этого ответа.

0
ответ дан 27 October 2017 в 21:39

Я предполагаю, что этот текст хранится в файле, сказать ls_l_out.txt.

Я не знаю, как Вы хотите сделанное сопоставление с образцом, но самая простая вещь, которую я вижу, состоит в том, чтобы соответствовать полномочиям.

Так, имея это в виду, можно использовать эту команду sed:

$ sed '/^-rw-------/d' ls_l_out.txt
-rw-rw-r-- 1 user1 user1   10 Oct 27 10:08 ./folder1/folder2/test-file1-228783-cause1-XY-OP-0001.pdf
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:12 ./folder1/folder2/test-file2-228651-cause1-XY-OP-0001.pdf
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:08 ./folder1/folder2/test-file3-228706-cause1-XY-OP-0005.pdf
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:15 ./folder1/folder2/test-file4-228695-cause1-XY-OP-0005.pdf
-rw-rw-r-- 1 user1 user1   20 Oct 27 10:15 ./folder1/folder2/test-file5-228675-cause1-XY-OP-0001.pdf

Если Вы выполняете это, и вывод выглядит хорошим, можно затем отредактировать файл, оперативный с -i отметьте к sed:

$ sed -i '/^-rw-------/d' ls_l_out.txt
1
ответ дан 2 November 2019 в 00:59

Другие вопросы по тегам:

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