Админим с Буквой
5.52K subscribers
303 photos
8 videos
59 files
1.16K links
Канал о системном администрировании, DevOps и немного Инфобеза.

По всем вопросам обращаться к @bykva. Рекламу не размещаю.
Download Telegram
sed remove trailing spaces

sed -i FILE -e 's/[[:space:]]*$//'


#sed
sed insert after Nth character in Mth line

sed -i '2s/^.\{12\}/&__INSERTED_SYMBOLS__/' file

the first part 2s sets up necessary string, and then ^.{12} says "take any 12 chars from the very beginning of line". Then, & inserts back those 12 chars and AFTER them we insert our pattern.

So, as a result we insert our pattern in 2nd string after 12th character

#sed
парсим вывод и приводим в нужный вид

Тут в чате прислали ссылку на пример того как человек парсил вывод сайта, чтобы выцепить видео:

$ curl -s "https://www.docker.com/dockercon/2019-videos/" | grep -i -A3  "2019-videos?"  | grep -v "\-\-" | grep -v "img id" | sed 's/<a href="/https:\/\/www.docker.com/g' | sed 's/">//g' | sed 's/<p>//g' | sed 's/<\/p>//g' | sed 'n;G;'

кмк это немножечко не практично. И поэтому в рамках самообучения я решил поднатаскать свои навыки в awk. В итоге получился такой вариант:

curl -s "https://www.docker.com/dockercon/2019-videos/" | \
awk 'match($0, /dockercon\/2019-videos\?watch=.*[a-zA-Z0-9]/) \
{ print "https://www.docker.com/"substr( $0, RSTART, RLENGTH ) } \
{ getline; if ( match($0, /<p>(.*)<\/p>/, m) ){print m[1]"\n"}}'

З.Ы. не являюсь гуру авк, парсинга и прочего. Если у вас есть мнение что мое решение не совсем верно или можно сделать красивее\лаконичнее, прошу вас писать замечения в ЛС (с пруфами) и я обязательно опубликую ваш вариант.

#awk #sed #grep