2016-12-21 2 views
0

У меня есть несколько файлов JSon, которые выглядят как образец ниже:Заменитель значения JSON с пространством, используя СЕПГ и регулярное выражение

#sample json  
{"urlCurrent":"https://www.website1.com/inside/377/388/408/8002.html?utm_source=source&utm_medium=Click&utm_campaign=123","id":"00001"} 
{"urlCurrent":"https://127.0.0.1/inside/414/756/765/34984.html","id":"00002"} 
{"urlCurrent":"https://msdn.anything.com/en-us","id":"00002"} 
{"urlCurrent":"https://web.something.com/","id":"00002"} 

Я хотел бы JSON стать:

#result json  
{"urlCurrent":"https://www.website1.com/","id":"00001"} 
{"urlCurrent":"https://127.0.0.1/","id":"00002"} 
{"urlCurrent":"https://msdn.anything.com/","id":"00002"} 
{"urlCurrent":"https://web.something.com/","id":"00002"} 

Я думаю, что с

sed -i 's/{regular expression}/\ /g' sample.json 

, который должен заменить что-либо после пробела, результат может быть достигнут. Однако я не знаю, как использовать регулярное выражение для соответствия шаблону, который мне нужен. Я также не знаю, какое ключевое слово я должен искать, чтобы достичь этого.

Есть ли способ обрезать urlCurrent, чтобы стать результатом, который мне нужен? Спасибо заранее!


12/23 Обновление Это работает:

sed -E -i -r 's!(http|ftp|https)://([0-9a-zA-Z\.]+)([0-9a-zA-Z\/\.?#=_&%~+-]+)!\2!g' sample.json 

ответ

1
sed -i -r 's/(.*:\/\/?[^\/]+\/?)[^\"]*(.*)/\1\2/' sample.json 
+0

СЭД: 1: «s /(.*:\/\/?[^\/]+\/)? [^ ... ": \ 1 не определено в RE –

+0

Спасибо за ответ! Однако это не сработало. Я все еще работаю над этим, и я отредактировал свой вопрос, как только выясню это. –

+0

Что касается этого (зависит от реализации _sed_): 'sed -i -E '/ (. *: \/\ /? [^ \/\"] + \ /?) [^ \ "] * (. *)/\ 1 \ 2/'sample.json' – stan

Смежные вопросы