Как переместить все строки, начинающиеся со строки, в начало текстового файла в Bash

Можно использовать несколько awkдля получения необходимых данных.

awk -F"|" {'print $5'}| awk -F"," '{print $3}'| awk -F":" '{print $2}'
  • первый awk приведет вас к {}данным
  • второй awk даст вамkey:value
  • третий awk даст вам значение ключа

Даже если формат изменится, шаблон должен быть идентифицирован по разделителям и соответствующим образом скорректирован.

напр.:

my_var="2017-07-16 01:06:07 | 8801624874139 | http://192.168.5.1:2020/credit/purchase/4 | XpressLoan | {"resultCode":0,"resultMessage":"OK","amount":100000,"serviceFee":24400,"totalOutstandingdebt":124400,"msisdn":8801624874139}"

$ echo $my_var | awk -F"|" {'print $5'}
 {resultCode:0,resultMessage:OK,amount:100000,serviceFee:24400,totalOutstandingdebt:124400,msisdn:8801624874139}

$ echo $my_var | awk -F"|" {'print $5'}| awk -F"," '{print $4}'
serviceFee:24400

$ echo $my_var | awk -F"|" {'print $5'}| awk -F"," '{print $3}'| awk -F":" '{print $2}'
100000
1
10.09.2019, 16:57
2 ответа

Использованиеgrep:

{ grep -E '^(OTP )?XY:' input_file; grep -E -v '^(OTP )?XY:' input_file; } > ouput_file

2 команды grepфильтруют input_fileс и без(-v)нужного шаблона.

{... } > output_fileсохраняет оба вывода grepв файл.

1
27.01.2020, 23:22

В GNUed(примечание :изменяет fileна месте; для вывода отредактированного файла на стандартный вывод вместо этого измените wqна,p q):

printf '%s\n' 'g/^\(\|OTP \)XY:/m0' wq | ed -s file
2
27.01.2020, 23:22

Теги

Похожие вопросы