Sedまたはawk - パターンマッチ後に新しい行を挿入する

Sedまたはawk - パターンマッチ後に新しい行を挿入する

複数のURLを含むファイルがあります。しかし、残念ながら、すべてのURLは1行にあります。

猫URL_ファイル

http://transfer.sh/PIGfk/my-file.002554http://transfer.sh/Ep9Md/my-file.002555http://transfer.sh/Ep9Md/my-file.002556http://transfer.sh/Ep9Md/my-file.002557

予想出力:

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

答え1

GNU grep

grep -oP 'http://.+?(?=http://|$)' url_file

答え2

使用perl:

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

説明する

これは肯定的な見通しで始まる部分文字列を見つけ、http://その前に改行文字()を入れます\n

それもアクティブバックビュー文字が前にある場合にのみ一致しますhttp://。これにより、行の最初のURLの前に改行文字が挿入されません。複数行で終わる場合はとても便利です。

修正する

@steeldriverの素晴らしいコメント以前は、Lookbehindを使用せずにsed '1d'最初の行を削除することに頼っていました。

答え3

次のGNUコマンドを使用できますsed

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

パターンを見つけ、パターンのhttp://前にCRを挿入します。

tail -n +2このsedコマンドで挿入された最初の(空白)行をスキップします。

答え4

私は以下の3つの方法でした。

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

関連情報