myfile="My File [Official Awesome File].txt"
myfile=$(echo $myfile | sed -r 's/(\[|\])/\\\1/g')
find ./ -name "${myfile}" -type f
Вы можете проверить, работает ли это?
Я ожидаю, что это изменит значение myfile
на
myfile="My File \[Official Awesome File\].txt"
Лучше использовать printf
:
myfile=$(printf '%q\n' "$myfile")
В вашем конкретном примере в найдите
, это будет:
find ./ -name "$(printf '%q\0' "$myfile")" -type f
Кроме того, вы можете:
awk -F';' '{ gsub(/,/,".", $0); save=$2-$3; gsub(/\./,",", save) }
NR>1 && $1{print $1, save, ""}' OFS=';' infile
1;0,2;
4;-0,5;
2;2,55;
NR>1
пропускает первую строку. $1
от $1 >0
. OFS=';'
устанавливает O выход F поле S на;
Ваш регион мешает. См.https://www.gnu.org/software/gawk/manual/html_node/Locale-influences-conversions.html
Для GNU awk вам необходимо установить переменную среды POSIXLY_CORRECT
и переменную среды LS _NUMERIC на локаль, которая использует запятую в качестве десятичного разделителя:
POSIXLY_CORRECT=1 LC_ALL=en_DK.utf-8 gawk -F';' '$1+0 > 0 {print $1 FS $2-$3 FS}' file
1;0,2;
4;-0,5;
2;2,55;
Я также использую $1+0 > 0
, чтобы не печатать заголовок. Вы также можете использоватьNR > 1 && $1 > 0
Вы также можете использовать gawk --posix
или gawk --use-lc-numeric
вместо POSIXLY _CORRECT env var.