Не кажется слишком сложным проанализировать файл журнала, как показано без предложенного #12345
магического разделителя. Я буду первым, кто укажет, что это предложение не удовлетворяет " Я хочу, чтобы текст в каждом поле мог содержать ЛЮБОЙ символ ", но я все равно предложу это на на том основании, что имена хостов, имена пользователей и временные метки , вероятно, не содержат пробелов.
cat log
ID Host User Message Timestamp
1 host1 user1 This user did this this and that 11:11:11
2 host1 user2 This other user did this new thing 11:11:51
while IFS=' ' read -r id host user message
do
timestamp="${message##* }" message="${message% *}"
printf "%s - %s - %s - %s - %s\n" "$id" "$host" "$user" "$message" "$timestamp"
done <log
ID - Host - User - Message - Timestamp
1 - host1 - user1 - This user did this this and that - 11:11:11
2 - host1 - user2 - This other user did this new thing - 11:11:51
@Henrik supports the community
уместен. Кроме того, я всегда выступаю за распечатку команд, которые должны быть выполнены, а затем внимательно просматриваю эти команды. Это дает вам встроенную -функцию пробного запуска. Если команды выглядят правильно, снова запустите сценарий и направьте вывод на sh
. OTOH, если команды неверны, то никакого ущерба не было нанесено.
for f in *0.txt
do
printf 'mv -- %q %q\n' "$f" "${f%.txt}.doc"
done
Спасибо Stéphane Chazelas за предложение более безопасного использования директивы printf
's %q
.