Исходя из желаемого результата, я предполагаю, что вы просто хотите, чтобы оба файла были объединены только с уникальными строками.
В этом случае cat
, sort
и uniq
могут сделать это за вас:
cat a.txt b.txt | sort | uniq > c.txt
cat
открывает содержимое обоих файлов
sort
сортирует вывод в алфавитном порядке
uniq
перечисляет только уникальные строки
> c.txt
помещает весь вывод в новый файлc.txt
Вы экранируете \
в регулярном выражении grep
. то есть ваш \\/
означает буквальную обратную косую черту, за которой следует косая черта, а \\K
означает буквальную обратную косую черту, за которой следует заглавная К.
Кроме того, /
даже не нужно экранировать с помощью grep
-, что необходимо только при использовании /
в качестве разделителя регулярных выражений, как по умолчанию с sed
или perl
(, и, как правило, это лучше просто использовать другой разделитель -, например ,
или :
, или=
).
Вместо этого используйте просто un -escaped /
и \K
. Например:
#!/bin/bash
ARTIST=$(echo "$@" | grep -oP 'https://\K.+?(?=.com)' | sed -e 's/\b\(.\)/\u\1/g')
echo "$ARTIST"
Пример вывода:
$./test.sh https://nothing.bandcamp.com/music
Nothing.Bandcamp
$ echo "https://nothing.bandcamp.com/music" | grep -oP 'https://\K.+?(?=.com)' | sed -e 's/\b\(.\)/\u\1/g'
Nothing.Bandcamp
Примечание. :Это верно как при запуске из командной строки, так и при запуске в сценарии.
напр. следующее производит нет вывода , так же, как в скрипте:
$ echo "https://nothing.bandcamp.com/music" | grep -oP 'https:\\/\\/\\K.+?(?=.com)' | sed -e "s/\b\(.\)/\u\1/g"