Экспортировать текстовый файл с некоторыми условиями

Набор опций можно визуализировать с помощью printf :

$ printf '<%s>  '  "-e ssh -axhPv"  arg2  arg3 ; echo
<-e ssh -axhPv>  <arg2>  <arg3> 

Если удалить кавычки, вы получите следующее:

$ printf '<%s>  '  -e ssh -axhPv  arg2  arg3 ; echo
<-e>  <ssh>  <-axhPv>  <arg2>  <arg3> 

То есть: аргументы разбиты на пробелы и представлены как отдельные элементы к команде.

Array

Однако общее решение - не удалять кавычки. Это открывает каждый аргумент для разделения IFS и расширения имени пути.

Правильным решением является использование массивов значений:

$ a=(-e ssh -axhPv  arg2  arg3)
$ printf '<%s>  ' "${a[@]}"; echo
<-e>  <ssh>  <-axhPv>  <arg2>  <arg3>   

Это позволяет добавлять параметры и даже параметры с пробелами:

$ a+=("arg with spaces" "one more")
$ printf '<%s>  ' "${a[@]}"; echo
<-e>  <ssh>  <-axhPv>  <arg2>  <arg3>  <arg with spaces>  <one more>  

Таким образом, вы сохраняете контроль над тем, как аргументы будут передаваться команде.

Ваш скрипт переписан:

#!/bin/bash
# Set rsync command options.
rsync_options=( "-e" "ssh" "-axhPv" )

if [ "$deletion_type" = "DELETE_ON_DESTINATION" ]; then
    rsync_options+=( "--delete" )
fi

if [ "$run_type" = "DRY_RUN" ]; then
    rsync_options+=("--dry-run")
fi

log_file="/var/tmp/log/script.sh"
exclude_file="/var/tmp/log/excludethis"
source_dir=/a
destination_dir=/b

# Run the backup.
    rsync_options+=('--log-file="'"$log_file"'"')
    rsync_options+=('--exclude-from="'"$exclude_file"'"')
    rsync_options+=("$source_dir")
    rsync_options+=("$destination_dir")
### Remove the printf to actually run the command:
printf '<%s>  ' rsync "${rsync_options[@]}"

ПРЕДОСТЕРЕЖЕНИЕ: Одна вещь, которую вы не можете поместить в массив, - это изменение направления.

0
17.03.2019, 19:05
1 ответ

Предполагая, что текст в круглых скобках сам по себе не может содержать круглые скобки и что вы имеете в виду меньше или равно 140 символам, попробуйте

grep -Po '(?<=\().{1,140}?(?=\))' in.txt > out.txt
0
28.01.2020, 03:54

Теги

Похожие вопросы