Sed или awk - вставить новую строку после шаблона соответствия

Вариация на тему ответа anderson-m-gomes. Используя Bash, я бы просто посетил каталоги:

$ cd /path/to/source/directory
$ cd /path/to/destination/directory

Затем я бы использовал переменную $OLDPWD, которая указывает на предыдущий каталог:

$ cp -v $OLDPWD/file1.txt .

Если нужно посетить каталоги в обратном порядке, то:

$ cp -v fileA.txt $OLDPWD/
2
28.02.2019, 02:36
5 ответов

Использованиеperl:

perl -pe 's#(?<=.)(?=http://)#\n#g' url_file

Пояснение

При этом используется положительный просмотр вперед , чтобы найти подстроки, начинающиеся с http://, и поместить перед ними новую строку (\n).

Он также использует положительный просмотр назад для сопоставления только тогда, когда перед http://есть символ. Таким образом, новая строка не вставляется перед первым URL-адресом в строке. Это будет очень удобно, если у вас будет несколько строк.

Обновление

До потрясающего комментария @steeldriver просмотр назад не использовался, и я полагался на sed '1d', чтобы удалить первую строку.

2
27.01.2020, 21:53

Вы можете использовать эту команду GNU sed:

sed 's,http://,\n&,g' url_file | tail -n +2

Он ищет шаблон http://и вставляет перед ним CR.

tail -n +2пропускает первую (пустую )строку, вставленную этой командой sed.

2
27.01.2020, 21:53

Группа GNU

grep -oP 'http://.+?(?=http://|$)' url_file
3
27.01.2020, 21:53

Вот как это сделать внутриPOSIX sed:

$ sed -e '
   s|http://|\
&|2;P;D
' input.file

Это помещает новую строку перед второй http://подстрокой, которая будет найдена в текущей строке. Затем мы выполняем действие «print upto 1st newline, chop upto 1st newline, rinse & repeat» до тех пор, пока не закончится пространство шаблона. Когда остается только 1 http ://, подстановка ничего не делает, и это последнее действие печати и удаления для текущей записи.

Вы можете использовать Perlмассивы для выполнения задания:

perl -F'http:\/\/' -lane 'print "http://$_" for @F[1..$#F]' input.file

Первое поле $F[0]пусто, поэтому при печати оно пропускается.

0
27.01.2020, 21:53

Я сделал тремя способами ниже

python

    #!/usr/bin/python
    import re
    k=open('filename','r')
    for i in k:
        print re.sub("http","\nhttp",i)



perl

perl -pne "s/http/\nhttp/g" filename



sed command

sed "s/http/\n&/g" filename

выход

http://transfer.sh/PIGfk/my-file.002554
http://transfer.sh/Ep9Md/my-file.002555
http://transfer.sh/Ep9Md/my-file.002556
http://transfer.sh/Ep9Md/my-file.002557
0
27.01.2020, 21:53

Теги

Похожие вопросы