^.*Reply.*$
\s*\d\s\w*\sago$
\sabout$
\sabout\s\d
\s$
^\s
s/^.*Reply.*$//g
s/\s*\d\s\w*\sago$//g
s/\sabout$//g
s/\sabout\s\d//g
s/\s$//g
s/^\s//g
Вы этим sedом пользуетесь?
Notepad++ находит
5 months ago
\s*[0-9]{1}\s\w*\sago$
about 18 hours ago
\babout\s[0-9]{1,2}\shours\sago\b
пробелы в начале и в конце строки
s/^[ \t]*//g
s/[ \t]*$//g
Пустые строки
/^$/d
<[^>]*>
переписать? Как сказать sedу, чтоб он не перезаписывал файл, а создал новый?<HTML>
<TiTLE>Книга пророка Авдия</TiTLE>
<BODY>
<P>
<h4>1</h4>
<p>1 Видение Авдия. Так говорит Господь Бог об Едоме: весть услышали мы от Господа, и посол послан <i>объявить</i> народам: "вставайте, и выступим против него войною!"
<p>2 Вот, Я сделал тебя малым между народами, и ты в большом презрении.
<p>3 Гордость сердца твоего обольстила тебя; ты живешь в расселинах скал, на возвышенном месте, и говоришь в сердце твоем: "кто низринет меня на землю?"
<p>4 Но хотя бы ты, как орел, поднялся высоко и среди звезд устроил гнездо твое, то и оттуда Я низрину тебя, говорит Господь.
<p>5 Не воры ли приходили к тебе? не ночные ли грабители, что ты так разорен? Но они украли бы столько, сколько надобно им. Если бы проникли к тебе обиратели винограда, то и они разве не оставили бы несколько ягод?
<p>6 Как обобрано все у Исава и обысканы тайники его!
<p>7 До границы выпроводят тебя все союзники твои, обманут тебя, одолеют тебя живущие с тобою в мире, ядущие хлеб твой нанесут тебе удар. Нет в нем смысла!
<p>8 Не в тот ли день это будет, говорит Господь, когда Я истреблю мудрых в Едоме и благоразумных на горе Исава?
<p>9 Поражены будут страхом храбрецы твои, Феман, дабы все на горе Исава истреблены были убийством.
<p>10 За притеснение брата твоего, Иакова, покроет тебя стыд и ты истреблен будешь навсегда.
<p>11 В тот день, когда ты стоял напротив, в тот день, когда чужие уводили войско его в плен и иноплеменники вошли в ворота его и бросали жребий о Иерусалиме, ты был как один из них.
<p>12 Не следовало бы тебе злорадно смотреть на день брата твоего, на день отчуждения его; не следовало бы радоваться о сынах Иуды в день гибели их и расширять рот в день бедствия.
<p>13 Не следовало бы тебе входить в ворота народа Моего в день несчастья его и даже смотреть на злополучие его в день погибели его, ни касаться имущества его в день бедствия его,
<p>14 ни стоять на перекрестках для убивания бежавших его, ни выдавать уцелевших из него в день бедствия.
<p>15 Ибо близок день Господень на все народы: как ты поступал, так поступлено будет и с тобою; воздаяние твое обратится на голову твою.
<p>16 Ибо, как вы пили на святой горе Моей, так все народы всегда будут пить, будут пить, проглотят и будут, как бы их не было.
<p>17 А на горе Сионе будет спасение, и будет она святынею; и дом Иакова получит во владение наследие свое.
<p>18 И дом Иакова будет огнем, и дом Иосифа — пламенем, а дом Исавов — соломою: зажгут его, и истребят его, и никого не останется из дома Исава: ибо Господь сказал это.
<p>19 И завладеют те, которые к югу, горою Исава, а которые в долине, — Филистимлянами; и завладеют полем Ефрема и полем Самарии, а Вениамин завладеет Галаадом.
<p>20 И переселенные из войска сынов Израилевых завладеют землею Ханаанскою до Сарепты, а переселенные из Иерусалима, находящиеся в Сефараде, получат во владение города южные.
<p>21 И придут спасители на гору Сион, чтобы судить гору Исава, и будет царство Господа.
</BODY>
</HTML>
Видение Авдия. Так говорит Господь Бог об Едоме: весть услышали мы от Господа, и посол послан объявить народам: "вставайте, и выступим против него войною!" Книга пророка Авдия 1:1
Вот, Я сделал тебя малым между народами, и ты в большом презрении. Книга пророка Авдия 1:2
Гордость сердца твоего обольстила тебя; ты живешь в расселинах скал, на возвышенном месте, и говоришь в сердце твоем: "кто низринет меня на землю?" Книга пророка Авдия 1:3
Но хотя бы ты, как орел, поднялся высоко и среди звезд устроил гнездо твое, то и оттуда Я низрину тебя, говорит Господь. Книга пророка Авдия 1:4
Не воры ли приходили к тебе? не ночные ли грабители, что ты так разорен? Но они украли бы столько, сколько надобно им. Если бы проникли к тебе обиратели винограда, то и они разве не оставили бы несколько ягод? Книга пророка Авдия 1:5
Как обобрано все у Исава и обысканы тайники его! Книга пророка Авдия 1:6
До границы выпроводят тебя все союзники твои, обманут тебя, одолеют тебя живущие с тобою в мире, ядущие хлеб твой нанесут тебе удар. Нет в нем смысла! Книга пророка Авдия 1:7
Не в тот ли день это будет, говорит Господь, когда Я истреблю мудрых в Едоме и благоразумных на горе Исава? Книга пророка Авдия 1:8
Поражены будут страхом храбрецы твои, Феман, дабы все на горе Исава истреблены были убийством. Книга пророка Авдия 1:9
За притеснение брата твоего, Иакова, покроет тебя стыд и ты истреблен будешь навсегда. Книга пророка Авдия 1:10
В тот день, когда ты стоял напротив, в тот день, когда чужие уводили войско его в плен и иноплеменники вошли в ворота его и бросали жребий о Иерусалиме, ты был как один из них. Книга пророка Авдия 1:11
Не следовало бы тебе злорадно смотреть на день брата твоего, на день отчуждения его; не следовало бы радоваться о сынах Иуды в день гибели их и расширять рот в день бедствия. Книга пророка Авдия 1:12
Не следовало бы тебе входить в ворота народа Моего в день несчастья его и даже смотреть на злополучие его в день погибели его, ни касаться имущества его в день бедствия его, Книга пророка Авдия 1:13
ни стоять на перекрестках для убивания бежавших его, ни выдавать уцелевших из него в день бедствия. Книга пророка Авдия 1:14
Ибо близок день Господень на все народы: как ты поступал, так поступлено будет и с тобою; воздаяние твое обратится на голову твою. Книга пророка Авдия 1:15
Ибо, как вы пили на святой горе Моей, так все народы всегда будут пить, будут пить, проглотят и будут, как бы их не было. Книга пророка Авдия 1:16
А на горе Сионе будет спасение, и будет она святынею; и дом Иакова получит во владение наследие свое. Книга пророка Авдия 1:17
И дом Иакова будет огнем, и дом Иосифа — пламенем, а дом Исавов — соломою: зажгут его, и истребят его, и никого не останется из дома Исава: ибо Господь сказал это. Книга пророка Авдия 1:18
И завладеют те, которые к югу, горою Исава, а которые в долине, — Филистимлянами; и завладеют полем Ефрема и полем Самарии, а Вениамин завладеет Галаадом. Книга пророка Авдия 1:19
И переселенные из войска сынов Израилевых завладеют землею Ханаанскою до Сарепты, а переселенные из Иерусалима, находящиеся в Сефараде, получат во владение города южные. Книга пророка Авдия 1:20
И придут спасители на гору Сион, чтобы судить гору Исава, и будет царство Господа. Книга пророка Авдия 1:21
yt-dlp --write-comments --skip-download "https://www.youtube.com/watch?v=gle0nP_Zn60"
jq -r '.comments[] | "\u001b[31m" + .author + "\u001b[0m" + " >>> " + .text' ИМЯ_РОЛИКА.info.json
jq -r '.comments[].text' ИМЯ_РОЛИКА.info.json > comments.txt
Как сказать sedу, чтоб он не перезаписывал файл, а создал новый?
man sed
sed .... file_in > file_out
yt-dlp --write-comments --skip-download "https://www.youtube.com/watch?v=00000000000" mv 'Имя ролика [00000000000].info.json' $(date +"%y%m%d").info.json jq -r '.comments[] | .author + " >>> " + .text' $(date +"%y%m%d").info.json > $(date +"%y%m%d").txt
cat "$(yt-dlp --write-comments --skip-download "https://www.youtube.com/watch?v=XXXXXXXXXXX" | awk -F'JSON to: ' '/info.json$/{print $2}')" | jq -r '.comments[] | .author + " >>> " + .text' > $(date +"%y%m%d").txt
./bash.sh: command substitution: строка 2: синтаксическая ошибка рядом с неожиданным маркером «(»
Не получилось, файл .info.json не переименовался...
В имени файла есть такие не буквы и не цыфры: ()[]-!
Можете добавить к команде jq: количество просмотров, количество комментариев к ролику, лайки и дизлайки к ролику и к комментариям?
jq -r '.comments[] | "\(.like_count) " + .author + " >>> " + .text'
... > FILE
... >> FILE
jq -r '.view_count'
jq -r '.comment_count'
jq -r '.like_count'
jq -r '.view_count + .comment_count + .like_count'
jq -r '".view_count" + ".comment_count" + ".like_count"'
jq -r '.view_count .comment_count .like_count'
jq: error (at <stdin>:0): Cannot index number with string "comment_count"
... | jq -r 'просмотров: "\(.view_count) лайков: \(.like_count) комментариев: \(.comment_count)"' > file.txt
echo "-------------------------------------------" >> file.txt
cat file.txt | jq -r '.comments[] | if .parent == "root" then "\(.like_count) \(.author) >>> \(.text)" else "\t\(.like_count) \(.author) >>> \(.text)" end' >> file.txt
cat "$(yt-dlp --write-comments --skip-download "https://www.youtube.com/watch?v=XXXXXXXXXXX" | awk -F'JSON to: ' '/info.json$/{print $2}')" | jq -r '"\(.view_count) \(.like_count) \(.comment_count)"' > $(date +"%y%m%d").txt
echo "-------------------------------------------" >> $(date +"%y%m%d").txt
cat $(date +"%y%m%d").txt | jq -r '.comments[] | if .parent == "root" then "\(.like_count) \(.author) >>> \(.text)" else "\t\(.like_count) \(.author) >>> \(.text)" end' >> $(date +"%y%m%d").txt
mv 'Имя ролика [XXXXXXXXXXX].info.json' $(date +"%y%m%d").info.json
108071 4449 1047
-------------------------------------------
jq: error (at <stdin>:1): Cannot index number with string "comments"
jq: error (at <stdin>:1): Cannot index number with string "comments"
jq: error (at <stdin>:1): Cannot index number with string "comments"
parse error: Invalid numeric literal at line 3, column 0
cat file.json | jq -r 'просмотров: "\(.view_count) лайков: \(.like_count) комментариев: \(.comment_count)"' > file.txt
echo "-------------------------------------------" >> file.txt
cat file.json | jq -r '.comments[] | if .parent == "root" then "\(.like_count) \(.author) >>> \(.text)" else "\t\(.like_count) \(.author) >>> \(.text)" end' >> file.txt
yt-dlp --write-comments --skip-download "https://www.youtube.com/watch?v=XXXXXXXXXXX"
, а теперь ее нет. Поэтому чтобы был файл Имя ролика [XXXXXXXXXXX].info.json я вначале запускаю yt-dlp.cat Имя ролика [XXXXXXXXXXX].info.json | jq -r 'просмотров: "\(.view_count) лайков: \(.like_count) комментариев: \(.comment_count)"' > $(date +"%y%m%d").txt
echo "-------------------------------------------" >> $(date +"%y%m%d").txt
cat Имя ролика [XXXXXXXXXXX].info.json | jq -r '.comments[] | if .parent == "root" then "\(.like_count) \(.author) >>> \(.text)" else "\t\(.like_count) \(.author) >>> \(.text)" end' >> $(date +"%y%m%d").txt
./bash.sh: строка 1: синтаксическая ошибка рядом с неожиданным маркером «(»
./bash.sh: строка 1: `cat Имя ролика [XXXXXXXXXXX].info.json | jq -r 'просмотров: "\(.view_count) лайков: \(.like_count) комментариев: \(.comment_count)"' > $(date +"%y%m%d").txt'
cat "Имя ролика [XXXXXXXXXXX].info.json" | jq -r 'просмотров: "\(.view_count) лайков: \(.like_count) комментариев: \(.comment_count)"' > $(date +"%y%m%d").txt
echo "-------------------------------------------" >> $(date +"%y%m%d").txt
cat "Имя ролика [XXXXXXXXXXX].info.json" | jq -r '.comments[] | if .parent == "root" then "\(.like_count) \(.author) >>> \(.text)" else "\t\(.like_count) \(.author) >>> \(.text)" end' >> $(date +"%y%m%d").txt
jq: error: syntax error, unexpected INVALID_CHARACTER, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
просмотров: "\(.view_count) лайков: \(.like_count) комментариев: \(.comment_count)"
jq: 1 compile error
-------------------------------------------
129 Дальше идут комментарии, с ними все нормально.
#!/usr/bin/env bash
set -o nounset
set -o errexit
set -o pipefail
URL="$1"
DIR="$PWD"
FILE_JSON="$DIR/"$(yt-dlp --write-comments --skip-download "$URL" |awk -F'JSON to: ' '/info.json$/{print $2}')
FILE_COMMENTS="$DIR/$(date +"%y%m%d") "$(cat "$FILE_JSON" | jq -r '.title').txt
echo -e "$URL\n" > "$FILE_COMMENTS"
cat "$FILE_JSON" | jq -r '.title' >> "$FILE_COMMENTS"
echo "--------------------------------------------------" >> "$FILE_COMMENTS"
cat "$FILE_JSON" | jq -r '"Просмотров: \(.view_count) Лайков: \(.like_count) Комментариев: \(.comment_count)"' >> "$FILE_COMMENTS"
echo "--------------------------------------------------" >> "$FILE_COMMENTS"
cat "$FILE_JSON" | jq -r '.comments[] | if .parent == "root" then "\n+\(.like_count) \(.author) >>> \(.text)" else "\t+\(.like_count) \(.author) >>> \(.text)" end' >> "$FILE_COMMENTS"
./скрипт "https://www.youtube.com/watch?v=XXXXXXXX"
#!/usr/bin/env bash
set -o nounset
set -o errexit
set -o pipefail
URL="$1"
DIR="$PWD"
FILE_JSON="$DIR/"$(yt-dlp --write-comments --skip-download "$URL" |awk -F'JSON to: ' '/info.json$/{print $2}')
FILE_COMMENTS="$DIR/$(date +"%y%m%d%H") "$(cat "$FILE_JSON" | jq -r '.title').txt
echo -e "$URL\n" > "$FILE_COMMENTS"
cat "$FILE_JSON" | jq -r '.title' >> "$FILE_COMMENTS"
echo "--------------------------------------------------" >> "$FILE_COMMENTS"
cat "$FILE_JSON" | jq -r '"Просмотров: \(.view_count) Лайков: \(.like_count) Комментариев: \(.comment_count)"' >> "$FILE_COMMENTS"
echo "--------------------------------------------------" >> "$FILE_COMMENTS"
cat "$FILE_JSON" | jq -r '.comments[] | if .parent == "root" then "\n+\(.like_count) \(.author) >>> \(.text)" else "\t+\(.like_count) \(.author) >>> \(.text)" end' >> "$FILE_COMMENTS"
mv 'Текст '\⧸\⧸' Текст [XXXXXXXXXXX].info.json' $(date +"%y%m%d%H").info.json
#!/usr/bin/env bash
mv 'Текст '\⧸\⧸' Текст [XXXXXXXXXXX].info.json' $(date +"%y%m%d%H").info.json
+ set -o nounset
+ set -o errexit
+ set -o pipefail
+ URL=https://youtu.be/XXXXXXXXXXX
+ DIR=/home/folder1/Folder2/Folder3/Folder4/1
++ yt-dlp --write-comments --skip-download https://youtu.be/XXXXXXXXXXX
++ awk '-FJSON to: ' '/info.json$/{print $2}'
+ FILE_JSON='/home/folder1/Folder2/Folder3/Folder4/1/Текст ⧸⧸ Текст [XXXXXXXXXXX].info.json'
++ date +%y%m%d%H
++ cat '/home/folder1/Folder2/Folder3/Folder4/1/Текст ⧸⧸ Текст [XXXXXXXXXXX].info.json'
++ jq -r .title
+ FILE_COMMENTS='/home/folder1/Folder2/Folder3/Folder4/1/23072112 Текст // Текст.txt'
+ echo -e 'https://youtu.be/XXXXXXXXXXX\n'
./bash.sh: line 13: /home/folder1/Folder2/Folder3/Folder4/1/23072112 Текст // Текст.txt: No such file or directory
⧸
и стандартным /
, вместе для сравнение ⧸/
/
нельзя(на сколько я понял) использовать в названии роликов на ютубе, поэтому вместо неё умельцы могут используют немного другой слеш не из стандартных символов ⧸
/
нельзя использовать в названии файлов в linux так как он является запрещенным, ну оно и понятно так как этот символ является разделителем в путях к файлам в линукс, но вот нестандартный слеш можно вполне использовать.⧸ --> /
yt-dlp
ключ --skip-download
на --dump-single-json
и в связи с этим немного поменять логику получения имени и записи файла.#!/usr/bin/env bash
#set -o xtrace
set -o nounset
set -o errexit
set -o pipefail
URL="$1"
DIR="$PWD"
FILENAME=$(yt-dlp --print filename -o "%(title)s" "$URL")
FILE_JSON="$DIR/$FILENAME".json
FILE_COMMENTS="$DIR/$(date +"%y%m%d") $FILENAME".txt
yt-dlp --write-comments --dump-single-json "$URL" > "$FILE_JSON"
echo -e "$URL\n" > "$FILE_COMMENTS"
cat "$FILE_JSON" | jq -r '.title' >> "$FILE_COMMENTS"
echo "--------------------------------------------------" >> "$FILE_COMMENTS"
cat "$FILE_JSON" | jq -r '"Просмотров: \(.view_count) Лайков: \(.like_count) Комментариев: \(.comment_count)"' >> "$FILE_COMMENTS"
echo "--------------------------------------------------" >> "$FILE_COMMENTS"
cat "$FILE_JSON" | jq -r '.comments[] | if .parent == "root" then "\n+\(.like_count) \(.author) >>> \(.text)" else "\t+\(.like_count) \(.author) >>> \(.text)" end' >> "$FILE_COMMENTS"
Не уверен, что это важно, но скажу. Раньше у файла был вид:
Текст ⧸⧸ Текст [XXXXXXXXXXX].info.json
А теперь:
Текст ⧸⧸ Текст.json
Имя_ролика [XXXXXXXXXXX].info.json
-o, --output
, при желании можно добиться старого названия где присутствует id ролика в виде [XXXXXXXXXXX], будет примерно следующее -o "%(title)s [%(id)s]"
FILENAME=$(yt-dlp --print filename -o "%(title)s [%(id)s]" "$URL")
FILE_JSON="$DIR/$FILENAME".info.json
Вы есть на GitHub? Позволите посмотреть ваши программы?