Итак, вы хотите что-то подобное:
tree | sed 's/├\|─\|│\|└/ /g'
Он заменяет все эти «строчные» символы местами.
См.:
$ tree
.
├── dir1
│ ├── file1
│ └── file2
└── dir2
├── file1
└── file2
2 directories, 4 files
$ tree | sed 's/├\|─\|│\|└/ /g'
.
dir1
file1
file2
dir2
file1
file2
2 directories, 4 files
-121--102508-
Достаточно простой способ устранения петель, запущенных в интерактивном режиме, состоит в остановке команды ( Ctrl - Z ), которая должна печатать номер задания, скажем [2] + Stopped
, которую затем можно убить с помощью kill% 2
.
-121--82007-
Здесь найдено решение awk без печати новой строки .
Переменная ORS (разделитель выходных записей) в AWK по умолчанию имеет значение «\n »и печатается после каждой строки.
Прежде всего, $(command_string)
выдаст ошибку «bash :команда _строка :команда не найдена» как подстановка команды.Подстановка команды запустит команду в скобках и заменит все это выводом этой команды.
Во-вторых, даже если вы использовали только $command_string
для выполнения своей команды, вы все равно добавляете одинарные кавычки к именам файлов. В именах файлов нет одинарных кавычек.
В общем, просто избегайте помещать команды в переменные. См. «Как мы можем запустить команду, хранящуюся в переменной? ».
Вместо этого может быть что-то вроде этого:
#!/bin/bash
for pathname in tracks/*; do
if [[ "$pathname" =~ ([0-9]+)[[:blank:]]* ]]; then
newpathname="${pathname%/*}/${BASH_REMATCH[1]}"
printf 'Would move "%s" to "%s"\n' "$pathname" "$newpathname"
# mv -i "$pathname" "$newpathname"
break
fi
done
Этот цикл делает (Я думаю )то, что вы пытаетесь сделать. Я закомментировал часть, которая фактически переименовывает файл для безопасности.