Я не настолько продвинут в сценарии bash, поэтому подозреваю, что это может быть что-то очень простое. Я создал сценарий для запуска URL-адреса с помощью curl
, затем проанализировал вывод с помощью grep
для некоторых идентификаторов перед добавлением его в текстовый файл. Добавляя его в текстовый файл, идентификаторы разделяются пробелами, поэтому я попытался заменить пробелы на новые строки следующим образом:
#!/bin/bash
IDS=$(curl -v --silent "http://example.com" 2>&1 | grep -Eo 'data-user_id="[0-9]+"' | grep -Eo "[0-9]+")
echo ${IDS} >> "ids"
sed 's/ /\n/g' "ids"
Но когда я запускаю это, я вижу, что вывод моего файла записывается в терминал, если я удалю последняя строка ( sed
), вывод исчезает. Раньше я использовал tr
, и происходило то же самое. Как мне этого избежать?
sed
печатает файл с заменой, которую вы ему сказали.
Я думаю, что лучшей идеей может быть следующее:
#!/bin/bash
IDS=$(curl -v --silent "http://example.com" 2>&1 | grep -Eo 'data-user_id="[0-9]+"' | grep -Eo "[0-9]+")
echo "$IDS" | tr ' ' '\n' >> "ids"
Это будет выводить $ IDS
и применять пробел к переводу новой строки перед добавлением в файл.
Попробуйте с perl
IDS=$(curl -sv http://example.com |& perl -lne 'print $1 if /data-user_id="(\d+)"/')