Выводит 2 позиции из того же файла в скрипт, а затем эхо

Вы можете использовать группы из 12, 32 и 16 символов (12 + 32 = 44, 44 + 16 = 60):

sed 's/\(.\{12\}\)\(.\{32\}\)\(.\{16\}\)/\1;\2;\3/'

Ваш пример ввода не содержит 60 символов (49, если я правильно подсчитал) . В противном случае, используя только 12 и 32:

$ sed 's/\(.\{12\}\)\(.\{32\}\)/\1;\2;/' input
2015021DUMMY;001EAN1377689456777678945GERDE00;02345
2015031DUMMY;002EAN1345647876867867867TURTR01;54565

... что может быть, а может и не быть тем, что вы хотели.

Обычно группы состоят из символов x, y-x и z-y-x.

Или вы можете использовать три отдельные замены:

sed 's/.\{12\}/&;/; s/.\{45\}/&;/; s/.\{62\}/&;/'

В этом случае длины будут x, y + 1 (для точки с запятой, вставленной вместо x) и z + 2.

0
04.02.2019, 14:56
1 ответ

Неясно, чего именно вы хотите добиться, но что-то вроде этого может сработать:

Edit1 :улучшено благодаря комментарию Гленна

Edit2 :завершил код внутри цикла

input="/tmp/files/extract.txt"
while read _ id _ ip; do # iterate over the lines
  echo -n "Pinging $id @ ip $ip... "
  if ping -w 1 $ip 2>&1 >/dev/null; then 
    echo OK
  else
    echo NOPE
  fi
done < "$input"

(bash -единственная версия, awk может быть более эффективным, но я с ним не знаком)

1
28.01.2020, 02:41

Теги

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