Нет. Очень немногие команды имеют эту функциональность, GNU awk(gawk
)добавил ее совсем недавно, и даже для тех команд, у которых есть -i
или эквивалент, все, что он делает, это создает временный файл в фоновом режиме.
Итак, способ сделать это:
tr -sc '[:alnum:][:punct:]' ' ' <file >newfile && mv newfile file
Если вам это нужно часто, вы можете придумать какую-нибудь функцию.:
tri(){
tmpFile=$(mktemp)
echo "$@"
case $# in
## You've given tr options
4)
trOpts="$1"
set1="$2"
set2="$3"
inputFile="$4"
;;
## No options, only set1 and set2 and the input file
3)
set1="$1"
set2="$2"
inputFile="$3"
;;
## Something wrong
*)
echo "Whaaaa?"
exit 1
;;
esac
tr "$trOpts" "$set1" "$set2" < "$inputFile" > "$tmpFile" &&
mv "$tmpFile" "$inputFile"
}
Затем вы запустите это как:
tri -sc '[:alnum:][:punct:]' ' ' file
Обратите внимание, что, в отличие от настоящего tr
, здесь предполагается, что имя файла будет аргументом, а не перенаправленным вводом (<file
), и что опции будут указываться вместе, как показано выше (, а не как-s -c
).
Поскольку у меня аналогичная конфигурация, я хотел бы ответить на ваши вопросы следующим образом.
Can I.. copy a file from my Ansible inventory to a remote?
Да.
Absolute paths are no option to me.
Используйте относительные пути. Конструкции типа
- name: Copy file(s) to remote host
copy:
src:../iventory/group_vars/group1/upload.txt
dest: /tmp
или
- name: Copy file(s) to remote host
copy:
src: "{{ item }}"
dest: /tmp
with_fileglob:
- "../iventory/group_vars/group1/*.txt"
работают.