複数の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