С ksh
, bash -O extglob
или zsh -o kshglob
с использованием некоторых двойных -отрицаний (здесь предполагается, что вы также хотите исключить файлы с 3 или более символами подчеркивания):
printf '%s\n' !(!(*_*_*)|*_*_*_*|*.*)
С zsh -o extendedglob
и его ~
, кроме оператора :
printf '%s\n' *_*_*~(*_*_*_*|*.*)
или используя родной оператор отрицания zsh
:
printf '%s\n' ^(^*_*_*|*_*_*_*|*.*)
Если вам по-прежнему нужны файлы с более чем двумя символами подчеркивания, это просто !(!(*_*_*)|*.*)
, *_*_*~*.*
или ^(^*_*_*|*.*)
вместо вышеуказанного соответственно.
Другими подходами могут быть!(*[._]*)_!(*[._]*)_!(*[._]*)
(заменить [_.]
на .
, чтобы разрешить 3 или более символов подчеркивания ).
Следующая команда awk
должна выполнять:
awk 'sub(/g$/,"",$2) {$2=1000000*$2}1' input.txt
Это проверит, заканчивается ли второй столбец($2
)в нижнем -регистре g
, пытаясь заменить завершающий g
словом «ничего» (, тем самым сократив поле до числового значения. ). Если это удается (, т. е. возвращаемое значение sub()
, которое является количеством выполненных успешных замен, не равно -нулю ), значение поля умножается на 1000000.
Замыкающий 1
инструктирует awk
распечатать все строки, включая любые сделанные модификации.