Пожалуйста, не ставьте лайк этому ответу. Это то, что я понял из ответа Стивена Китта выше, который я принял как правильный.
1)Заглавная буква X, как и в a=rwX
, говорит :Все найденные каталоги получат x, и все найденные обычные файлы, которые имеют по крайней мере 1 исполняемый бит в одной из трех групп разрешений, также получат x в все три группы.
2)Комбинация a-x
(, которая гарантирует, что все файлы потеряют бит выполнения ), и последующая a=rwX
говорит :Получить биты чтения и записи везде, и бит выполнения только для каталогов.
Кажется, что это продублировано, но в любом случае, если это было понято, можно сделать это следующим образом:
Сначала сохранить список в каком-нибудь nameslist.txt
файле, затем:
sed -rn '/^[^\s]+\s+[F]/p' list.txt > result.txt
, который должен вернуть следующий вывод в файле result.txt
:
60 FREDDIE 1201 +4
61 FINLAY 1200 -2
awk '$2 ~ /^L/' file
Приказывает awk
протестировать второе поле $2
с помощью регулярного выражения ~
выражения ^L
и вывести соответствующие строки.
Регулярное выражение соответствует второму полю ($2
), когда оно начинается ^
сL
Опираясь на ответ @bu5hman :С помощью awk вы можете легко передать букву в качестве параметра:
awk -v letter="L" 'substr($2, 1, 1) == letter' file
# or with a constructed regex
awk -v letter="L" '$2 ~ "^" letter' file
Предполагая, что у вас есть этот список в 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 в верхнем регистре.
По возможности избегайте регулярных выражений. Пример AWK:
index($2, "L") == 1
Другой пример grep:
grep -E "[0-9]+ +L" file
+ соответствует одному или нескольким вхождениям предыдущего символа, поэтому в этом случае мы находим соответствие по крайней мере одному цифровому символу и по крайней мере одному пробелу, за которым следует заглавная L.
-E требуется, чтобы интерпретировать + как специальный символ вместо буквального «+»
выход:
59 LOUIS 1202 +1
62 LEON 1137 +12
73 LUCA 973 -1