Привет, я пытаюсь заменить \_\_SEC\_\_00
на $6$
и вставить $
после 19 символов в этом поле.
Данные:
Avivit Katzir,avivit,\_\_SEC\_\_00wLaxAKg1ecw80jGW0ACTr.kI5gttGo/YxHHUOeCZzDn8.3yFyPqJSKwXXYfBVPjco7RKPjK/1XBvYQAXC4jKm9pt8G6WtMrIRs0Lp/,demo,demo,demo
Ожидаемый результат:
Avivit Katzir,avivit,$6$wLaxAKg1ecw80jGW$0ACTr.kI5gttGo/YxHHUOeCZzDn8.3yFyPqJSKwXXYfBVPjco7RKPjK/1XBvYQAXC4jKm9pt8G6WtMrIRs0Lp/,demo,demo,demo
Я попробовал эту команду:
sed -e 's/\\_\\_SEC\\_\\_../\$6\$/' -e 's/./&\$/19'
Но у меня проблема со вставкой $
.
В awk
, с показанными примерами, не могли бы вы попробовать следовать, основываясь на показанных вами примерах, написанных в GNU awk
. Вы можете изменить \\_\\_SEC\\_\\_00
на \\_\\_SEC\\_\\_..
, если хотите сопоставить любые символы здесь.
awk '
match($0,/\\_\\_SEC\\_\\_00/){
print substr($0,1,RSTART-1) "$6$"\
substr($0,RSTART+RLENGTH,16)"$"\
substr($0,RSTART+RLENGTH+16)
}' Input_file
Объяснение: Добавлено подробное объяснение вышеизложенного.
awk ' ##Starting awk program from here.
match($0,/\\_\\_SEC\\_\\_00/){ ##using match function of awk here to match regexp \\_\\_SEC\\_\\_00, notice double \\ to escape \ here.
print substr($0,1,RSTART-1) "$6$"\ ##Printing sub string from 1st index of line to just before 1 index of matched pattern then printing $6$
substr($0,RSTART+RLENGTH,16)"$"\ ##Printing sub string after matched part till next 16 characters here thne printing $ here.
substr($0,RSTART+RLENGTH+16) ##Printing rest of the line from here.
}' Input_file ##mentioning Input_file here.
Все, что вам нужно, это группа захвата.
sed -E 's/\\_\\_SEC\\_\\_..(.{16})/$6$\1$/'
если вы пытаетесь преобразовать хэши из дампа данных Houzz, ваша форумула отключена. Не все они начинаются с __SEC__00.