Intereting Posts
Мой раздел Linux не имеет стабильного подключения к Интернету Как дублировать каждую строку с помощью команд оболочки? su -s '/ bin / bash' продолжает использовать shell в / etc / passwd Как использовать аргумент командной строки как выражение соответствия rexx awk? Запустите `grep`, исключая файл по определенному пути Драйвер последовательного порта USB PL2303 / PL2303X iconv (для использования с rsync), чтобы избежать недопустимых имен файлов Windows в локальном разделе NTFS Есть ли заклинание командной строки для сохранения определенных столбцов по имени в CSV-файле? Проблемы с обновлением Yum на CentOS 6.5 минимальны, поскольку гостевая версия VMware OS X El Capitan, systemstats: com.apple.telemetry.shutdown Задержка дальнейшего запуска, пока время не будет синхронизировано auditctl comm vs. exe Когда / как Linux решает закрыть сокет при приложении kill? Перенаправить вывод ошибки grep в файл apt-get не останавливается на Ctrl-c, что делать?

В сценарии bash, как я могу использовать «tr -d» для удаления введенного пользователем символа?

#!/bin/bash while getopts ":r" opt; do case $opt in r) [ -f "$1" ] && input="$1" || input="-" read $userinp cat $input | tr -d "$userinp" ;; esac done 

Это мой код. По сути, я пытаюсь либо проанализировать файл, либо строку, и пользователь может выбрать символ для удаления из текста или строки.

Вызов будет примерно таким:

 /stripchars -r 'd' test > out 

Это удалит все экземпляры d из test файла и выведет новую строку или текст. На данный момент я просто получаю пустые выходы.

  1. Символ (или набор или диапазон) для удаления определяется аргументом -r flags, поэтому нет необходимости его read .
  2. Имя файла (если оно есть) остается в аргументе position после завершения обработки командной строки.
  3. Не обрабатывайте файл, если вы еще не закончили обработку флагов командной строки.
  4. Строка опций для getopts – назад.

Решение:

 #!/bin/bash # Process command line. # Store r-flag's argument in ch, # Exit on invalid flags. while getopts 'r:' opt; do case "$opt" in r) ch="$OPTARG" ;; *) echo 'Error' >&2 exit 1 ;; esac done # Make sure we got r-flag. if [[ -z "$ch" ]]; then echo 'Missing -r flag' >&2 exit 1 fi # Shift positional parameters so that first non-flag argument # is left in $1. shift "$(( OPTIND - 1 ))" if [[ -f "$1" ]] || [[ -z "$1" ]]; then # $1 is a (regular) file, or unset. # Use file for input, or stdin if unset. cat "${1:--}" | tr -d "$ch" else # $1 is set, but not a filename, pass it as string to tr. tr -d "$ch" <<<"$1" fi 

Это будет использоваться как

 $ ./script -r 'az' file 

(удаляет все строчные буквы в file )

 $ ./script -r 'az' "Hello World!" 

(удаляет все строчные буквы в данной строке, если это не является именем файла )

 $ ./script -r 'az' 

(удаляет все символы нижнего регистра в стандартном потоке ввода)