Если вы хотите заменить один класс символов на другой, используйте tr
.
for f in *; do
test -f "$f" && echo mv "$f" "$( tr '[:upper:]' '[:lower:]' <<<"$f" )"
done
Сценарий переименует все файлы в текущем каталоге в строчные буквы. Каталоги будут пропущены. Удалите echo
, когда вы уверены, что оно делает то, что вы хотите. Вы можете заменить [: upper:]
и [: lower:]
на AZ
и az
соответственно, если у вас есть только стандартные имена файлов ASCII. (примечание: AZ
, а не [AZ]
).
В качестве альтернативы можно использовать встроенную в Bash подстановку переменных с верхнего на нижний регистр:
for f in *; do
test -f "$f" && echo mv "$f" "${f,,}"
done
Я бы сделал это только с awk.
Этот будет сканировать файл и генерировать по одному файлу для каждого типа ошибки
$ ex="";awk -F"[;=]" -v ex=$ex '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k!~ex || ex=="") print a[k] >k"error_code.txt"}' performance.log
Если вы хотите «исключить» некоторые ошибки, вы можете соответственно изменить значение переменной оболочки ex, например ex = "2 | 3"
(исключить 2 или 3)
Тест:
$ echo "$c"
Error_code=1; num=5;
Error_code=2; num=7;
Error_code=3; num=9;
Error_code=1; num=2;
Error_code=22; num=5;
$ ex="";echo "$c" |awk -F"[;=]" -v ex=$ex '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k!~ex || ex=="") print a[k],k}'
num=5
num=2 1
num=7 2
num=9 3
num=5 22
$ ex="22|1";echo "$c" |awk -F"[;=]" -v ex=$ex '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k!~ex || ex=="") print a[k],k}'
num=7 2
num=9 3
С другой стороны, если вы хотите сопоставить определенные шаблоны вместо исключения шаблонов, вы можете сделать это следующим образом:
$ inc="1";awk -F"[;=]" -v inc=$inc '{a[$2]=a[$2] "\n" $3"="$4}END{for (k in a) if (k~inc || inc=="") print a[k] >k"error_code.txt"}' performance.log
Применить к var inc
(включите) коды ошибок, которые вы хотите распечатать, или оставьте поле пустым, чтобы включить все ошибки. ( inc = ""
)
Один awk
скрипт мог все это сделать. Это также можно сделать с помощью чистого сценария оболочки Bourne, как показано ниже:
grep -E -o '[[:digit:]]+; num=[^;]+' performance.log \
| while IFS="; " read n num; do
echo "$num" >> "${n}_error_code.txt"
done
Часть grep
извлекает подстроку « EEE; num = NNN
» из ваших строк » Код_ошибки = EEE; число = NNN;
". Цикл while читает EEE
и num = NNN
и записывает последнее в EEE_error_code.txt
. Если вас интересует только один конкретный код ошибки (EEE ниже), вы можете изменить команду grep
на:
grep -E -o '\<EEE; num=[^;]+' performance.log | while ...
Если вас интересует небольшой набор кодов ошибок (EEE1 ... EEEn ниже), вы можете изменить команду grep
на :
grep -E -o '\<(EEE1|EEE2|...|EEEn); num=[^;]+' performance.log | while ...