POSIXly:
find . ! -name . -prune -type d ! -name '*)'
With zsh
:
print -rl -- *[^\)](/)
Другие Bourne-подобные оболочки не имеют возможности фильтровать результат globbing. Вы можете использовать:
printf '%s\n' *[!\)]/
для поиска только каталогов. Но при этом к результату расширения будет добавлена косая черта. С каталогом foo
вы получите foo/
.
Я думал, что это будет легко сделать с помощью awk
, но в итоге получилось что-то вроде беспорядка. Однако, поскольку я приложил усилия для ее решения, вот потенциальное решение с awk
, которое использует функцию FPAT
:
cat file.txt | awk -v FPAT='[^;]+|"[^"]+"' '{ for( col=1; col<=NF; col++ ) { printf "%s|", $col; } print "" }'
По сути, он использует регулярное выражение FPAT
для определения того, что классифицируется как элемент (либо без точки с запятой, либо в кавычках ), и перепечатывает их с символом(|
)между столбцами. Изначально я хотел использовать опцию OFS
, но похоже, что она плохо сочетается с опцией FPAT
Изменение данных в полях небезопасно.
Для разбора CSV-файлов можно использоватьcsvtool
$ echo '"BARCELONA";"";"Country.666;53";15' | csvtool -t ';' col 1- -
BARCELONA,,Country.666;53,15
или для отдельных полей
$ echo '"BARCELONA";"";"Country.666;53";15' | csvtool -t ';' col 1,3 -
BARCELONA,Country.666;53
Это можно сделать с помощью GNU sed
редактора с включенными расширенными регулярными выражениями:
$ sed -Ee 's/(("[^"]*")+|[^;]+);/\1|/g' in.csv