Легко сделать с помощью sed
sed 's/\(\([^,]*,\)\{4\}\)\(.*\)/\1\L\3/' file.csv
, если вы не любите переходящие символы, вы можете изменить сценарий (для GNU sed):
sed -r 's/(([^,]*,){4})(.*)/\1\L\3/' file.csv
, которые находят четыре группы любых (0 включенных) символов без запятой, а затем запятую и оставить его без изменений (\1
) и заменить все в оставшейся части строки (\3
) на более низкую версию.
Или путем вырезания
и вставки
paste -d, <(cut -d, -f-4 file.csv) <(cut -d, -f5- file.csv | tr '[[:upper:]]' '[[:lower:]]')
-121--289533- Вероятно, вам нужно указать сценарий configure
на сценарии конфигурации:
./configure --with-tcltk --with-tcl-config=/usr/lib/tclConfig.sh --with-tk-config=/usr/lib/tkConfig.sh
Они предоставляются соответственно tcl-dev
и tk-dev
в Debian 8.
Просто используйте:
cd -P ..
Из bash manpage:
Параметр -P говорит использовать физическую структуру каталогов вместо следующие символьные ссылки.
grep
usa expresiones regulares , no shell globs .
La expresión regular 0000:00:*.0/usb1/authorized_default
coincide con la cadena 0000:00
+ cero o más dos puntos + cualquier carácter + 0/usb1/authorized_default
.
Si intercambia el *
y el .
, coincidirá con cualquier cadena que contenga 0000:00
seguida de 0/usb1/authorized_default
.(.*
coincide con cualquier número(*
)de cualquier carácter(.
).)
Del mismo modo, usb*/
coincidirá con us/
, usb/
, usbbb/
, etc., pero no con usb1
.
En realidad, también está el problema de que el *
sin comillas en el argumento de grep
es tomado como un carácter global por el shell , incluso antes de que grep
lo vea. Entonces, si hay archivos que coincidirían con 0000\:00\:*.0/usb*/authorized_default
como un patrón global, eso afectaría la cadena que va a grep
. Múltiples coincidencias irían como múltiples argumentos, y grep
tomaría las que siguen a la primera como nombres de archivo.
Ponga comillas alrededor de cualquier expresión regular en la línea de comando para evitar eso.
En cualquier caso, ni siquiera necesita el grep
aquí, como dice @Kusalananda. La opción -name
a find
se puede usar para hacer coincidir los nombres de archivo con un patrón global. Al menos algunas implementaciones find
también tienen la opción -regex
para comparar nombres de archivo con expresiones regulares.
También hay una serie de variantes de expresiones regulares, consulte:¿Por qué mi expresión regular funciona en X pero no en Y?
Como ya señaló ilkkachu, grep
usa expresiones regulares básicas, lo que significa que :*
coincide con cero o más :
, y b*
coincide con cero o más b
.
No grep
la salida de find
, en su lugar use find
para buscar su archivo. En el caso general, los nombres de archivo pueden contener saltos de línea, lo que haría que grepping no funcionara. Usar find
para filtrar directamente los nombres de ruta que desea ver también es más eficiente y seguro.
find. -type f -name 'authorized_default'
Si tiene que hacer coincidencias en otras partes del nombre de la ruta:
find. -type f -path '*0000:00:*.0/usb*/authorized_default'
-path
funciona como -name
pero hace coincidir un patrón global de nombre de archivo con la ruta completa en lugar de solo con la parte del nombre de archivo de la ruta (, un *
puede coincidir con uno o varios/
).
Relacionado: