вставить", " перед 2-м вхождением конкретного слова в строку в unix

вставить", " перед 2-м вхождением конкретного слова в строку в unix

30.01.2020 07:14:14 Просмотров 22 Источник

Я хочу вставить ", " перед каждым появлением https, кроме первого https в приведенном ниже JSON

вход:

https://gitlab.com/pc-sa/sa-pc-pcc/-/archive/test-demo/abc-test-demo.zip?path=Documentation Assets/temp check
https://gitlab.com/pc-sa/sa-pc-pcc/-/archive/test-demo/abc-test-demo.zip?path=Documentation Assets/temp dir
https://gitlab.com/pc-sa/sa-pc-pcc/-/archive/test-demo/abc-test-demo.zip?path=Documentation Assets/temp dir

Выход:

https://gitlab.com/pc-sa/sa-pc-pcc/-/archive/test-demo/abc-test-demo.zip?path=Documentation Assets/temp check", "https://gitlab.com/pc-sa/sa-pc-pcc/-/archive/test-demo/abc-test-demo.zip?path=Documentation Assets/temp dir", "https://gitlab.com/pc-sa/sa-pc-pcc/-/archive/test-demo/abc-test-demo.zip?path=Documentation Assets/temp dir

EDIT: добавление показанных усилий OP(в комментариях) в пост здесь.

cat /tmp/mmm.txt| sed ':a;N;$!ba; s/https/\","https/2'
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59978982/insert-before-2nd-occurrence-of-a-particular-word-in-string-in-unix#comment106073140_59978982
Это не ясно, пожалуйста, добавьте больше деталей с ясностью в вашем посте и сообщите нам об этом.
https://stackoverflow.com/questions/59978982/insert-before-2nd-occurrence-of-a-particular-word-in-string-in-unix#comment106073148_59978982
Вы пробовали что-нибудь в седе?
https://stackoverflow.com/questions/59978982/insert-before-2nd-occurrence-of-a-particular-word-in-string-in-unix#comment106073345_59978982
кот / ТМП/МММ.txt| sed ': a; N;$!ba; s / https/\", "https / 2" но я не знаю, сколько еще строк https есть, я хочу игнорировать первую строку https, а для оставшихся nth https он должен добавить ",".
https://stackoverflow.com/questions/59978982/insert-before-2nd-occurrence-of-a-particular-word-in-string-in-unix#comment106074291_59978982
Что содержит строка? Это файл? Стандартный вывод какой-то команды? Что-то еще? Пожалуйста, покажите нам ваш код, в самом вопросе.
https://stackoverflow.com/questions/59978982/insert-before-2nd-occurrence-of-a-particular-word-in-string-in-unix#comment106074594_59978982
@14MAR, пожалуйста, добавьте свои усилия, которые вы упоминаете в комментариях, в свой вопрос, комментарии не предназначены для кода, пожалуйста, сделайте это.
https://stackoverflow.com/questions/59978982/insert-before-2nd-occurrence-of-a-particular-word-in-string-in-unix#comment106076099_59978982
@14MAR, вы изменили образцы, эти образцы не показаны, что вы показали ранее, это будет совершенно другой вопрос сам по себе. Поэтому, пожалуйста, поставьте сами предыдущие образцы и откройте новый вопрос для этих образцов.
https://stackoverflow.com/questions/59978982/insert-before-2nd-occurrence-of-a-particular-word-in-string-in-unix#comment106076197_59978982
@14MAR, пожалуйста, не меняйте образцы часто, иначе это будет другой вопрос все вместе, я также добавил ваш показанный код в вашем посте сейчас, для новых образцов вы можете открыть новый вопрос.
https://stackoverflow.com/questions/59978982/insert-before-2nd-occurrence-of-a-particular-word-in-string-in-unix#comment106097601_59978982
@ghoti, hello Ghoti sir, imho хотел бы попросить вас, если вы думаете, что можете проголосовать за повторное открытие для этого вопроса, так как ОП предоставил усилия в комментариях позже я добавил их в своем посте тоже. Также ОП признал, что он / она научился работать на so(не уверен, что комментарий был удален) ура, сэр.

Ответы - вставить", " перед 2-м вхождением конкретного слова в строку в unix / insert ", " before 2nd occurrence of a particular word in string in unix

Beta

30.01.2020 07:52:39

Я бы изменил все вхождения, а затем изменил бы первое обратно:

sed -e 's/https/", "https/g' -e 's/", "https/https/'

(Ваши примеры не совсем соответствуют описанию цели, поэтому я не могу проверить это решение, но я думаю, что оно, по крайней мере, приблизительно правильно.)

https://stackoverflow.com/questions/59978982/insert-before-2nd-occurrence-of-a-particular-word-in-string-in-unix/59979286#comment106073760_59979286
Это добавит в первый https также, я не хочу этого делать. Я хочу исключить первый https и для остальных он должен добавить ",".
Является ответом!
RavinderSingh13

30.01.2020 08:10:14

Не могли бы вы попробовать следующее (написано и протестировано с предоставленными образцами).

awk -v s1="\",\"" '{val=(val?val s1:"")$0} END{print val}'  Input_file

Пояснение: добавление подробного уровня объяснения для приведенного выше кода.

awk -v s1="\",\"" '         ##Starting awk program here and creating variable s1 whose value is ","
{                           ##Starting this code main BLOCK from here.
  val=(val?val s1:"")$0     ##Creating variable val whose value is keep concatenating to its own value.
}                           ##Closing this program main BLOCK here.
END{                        ##Starting END block of this program from here.
  print val                 ##Printing variable val here.
}                           ##Closing this program END block here.
'  Input_file               ##Mentioning Input_file name here.

Чтобы сохранить выходные данные в переменную оболочки и прочитать значения из переменной оболочки попробуйте like (где var-ваша переменная оболочки, имеющая значения, вы можете назвать ее по своему желанию):

var=$(echo "$var" | awk -v s1="\",\"" '{val=(val?val s1:"")$0} END{print val}'); echo "$var"
kvantour

30.01.2020 09:25:33

 awk 'BEGIN{ORS=','}1' file

Это даст вам дополнительную запятую в конце

 awk '{printf (FNR==1?"":",")"%s", $0}' file

Этого не будет

Закрыть X