Un poco de perl retorcido:
perl -F'\|' -lane '
$f2{ $F[0] }{ $F[1] } = 1;
$f3{ $F[0] } = $F[2] if not exists $f3{ $F[0] };
} END {
for $key (sort keys %f2) {
printf "%s|{%s}|%s\n",
$key,
join(",", map {chr(39). $_. chr(39)} sort keys %{$f2{$key}}),
$f3{$key};
}
' file
Las primeras 2 líneas acumulan los datos usando matrices asociativas.
Luego, el bloque END recorre los datos, formatos e impresiones.
Проблема в том, что вы не цитируете расширение, которое вы передаете echo
.
Если расширение не заключено в кавычки, это приводит к разбиению поля результирующей строки на слова по пробелам (, предполагая значение по умолчанию $IFS
), и, что особенно важно, генерация имени файла (с подстановкой )для каждого из слов.
Одно из слов — .*
, и оно расширится на все скрытые имена в текущем каталоге.
Вместо:
foo="ModPagespeedLoadFromFileRuleMatch disallow.*"
echo "${foo//\\/\\\\}"
Или даже лучше,
foo="ModPagespeedLoadFromFileRuleMatch disallow.*"
printf '%s\n' "${foo//\\/\\\\}"
Это выведет
ModPagespeedLoadFromFileRuleMatch disallow.*
У вас та же проблема с echo $bar
.
См. также: