Извлечь строки из файлов с именами, начинающимися с заданной буквы

Пожалуйста, не ставьте лайк этому ответу. Это то, что я понял из ответа Стивена Китта выше, который я принял как правильный.


1)Заглавная буква X, как и в a=rwX, говорит :Все найденные каталоги получат x, и все найденные обычные файлы, которые имеют по крайней мере 1 исполняемый бит в одной из трех групп разрешений, также получат x в все три группы.

2)Комбинация a-x(, которая гарантирует, что все файлы потеряют бит выполнения ), и последующая a=rwXговорит :Получить биты чтения и записи везде, и бит выполнения только для каталогов.

8
15.10.2019, 21:22
6 ответов

Кажется, что это продублировано, но в любом случае, если это было понято, можно сделать это следующим образом:

Сначала сохранить список в каком-нибудь nameslist.txtфайле, затем:

sed -rn '/^[^\s]+\s+[F]/p' list.txt > result.txt, который должен вернуть следующий вывод в файле result.txt:

60 FREDDIE 1201 +4 61 FINLAY 1200 -2

5
27.01.2020, 20:08
awk '$2 ~ /^L/' file

Приказывает awkпротестировать второе поле $2с помощью регулярного выражения ~выражения ^Lи вывести соответствующие строки.

Регулярное выражение соответствует второму полю ($2), когда оно начинается ^сL

19
27.01.2020, 20:08

Опираясь на ответ @bu5hman :С помощью awk вы можете легко передать букву в качестве параметра:

awk -v letter="L" 'substr($2, 1, 1) == letter' file
# or with a constructed regex
awk -v letter="L" '$2 ~ "^" letter' file
7
27.01.2020, 20:08

Предполагая, что у вас есть этот список в list.txt, вы можете сделать следующее:

 grep -h L list.txt > list_L.txt 

Объяснение:grep L list.txtдает вам все строки, содержащие заглавную букву L. Опция -hподавляет вывод имени файла, но необходима только в том случае, если вы ищете в нескольких файлах (, например.grep -h L lis*.txt). Добавление > list_L.txtперенаправляет строки в указанный файл.

Если буква L должна стоять только в начале «слова» (в имени, в данном случае ), вам нужно немного изменить приведенную выше команду:

 grep -h '\<L' list.txt > list_L.txt 

Добавление \<соответствует началу «слова», поэтому \<Lвыбирает строки, содержащие слово, начинающееся с буквы L в верхнем регистре.

2
27.01.2020, 20:08

По возможности избегайте регулярных выражений. Пример AWK:

index($2, "L") == 1
1
27.01.2020, 20:08

Другой пример grep:

grep -E "[0-9]+ +L" file

+ соответствует одному или нескольким вхождениям предыдущего символа, поэтому в этом случае мы находим соответствие по крайней мере одному цифровому символу и по крайней мере одному пробелу, за которым следует заглавная L.

-E требуется, чтобы интерпретировать + как специальный символ вместо буквального «+»

выход:

59  LOUIS   1202    +1
62  LEON    1137    +12
73  LUCA    973     -1
2
27.01.2020, 20:08

Теги

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