переместить шаблон (, который может быть динамическим повторением )в начало строки

Если вы хотите добавить www.и добавить .comк строкам, считанным из файла web.txt, и использовать pingдля результирующих строк:

while IFS= read -r company; do
    ping "www.$company.com"
done <web.txt
0
07.02.2021, 17:16
2 ответа

Для таких вопросов рекомендуется вызывать GNU sed в расширенном режиме регулярных выражений (-E ), чтобы лишние обратные косые черты и \{1,\} не мешали читабельности регулярных выражений. Кроме того, мы можем сделать это несколькими вызовами команды s/// после того, как желаемый фрагмент будет перемещаться по одному за раз.

sed -Ee '
  s|\.T/[^.]+|\n&\n|
  s|(.*)\n(.*)\n|\2,\1|
  s|(\.X/[^.]+)+|\n&\n|
  s|(.*)\n(.*)\n|\2\1|
' file

П.С.:Предполагая, что начальные пробелы являются опечаткой. Кроме того, ваша первая строка в сценарии с несколькими шаблонами, ваш вывод не соответствует вашему вводу.

3
18.03.2021, 22:32

Это работает, учитывая пример:

$ sed 's:\([^.]*\)\.\([^.]*\)\.\([^.]*[A-Z]\)\([.X0-9/]*\)\(.*\)$:\4\2,\1.\3.\5:'

Сравним:

# OP's
.X/918875797554.X/918875797550.X/9188757975581.T/IUDFW,991/10/15,SUN.Z/0136/15MAR/KWW/I.G/PLMW/1/SPI.H/XZTK. 
.X/918875797557.X/918875797550.X/918875797558.X/918875797559.T/IUDFW,1991/10/15,SUN.Q/0136/15SEP/KWW/I.W/PLMW/1/SPI.H/XZTK.
.X/918875797551.T/BJYE,1991/10/15,SUN.Z/0136/03MAR/KWW/I.L/PLMW/1/SPI.H/XZTK.

# command output
.X/918875797554.X/918875797550.X/918875797558.T/IUDFW,1991/10/15,SUN.Z/0136/15MAR/KWW/I.G/PLMW/1/SPI.H/XZTK. 
.X/918875797557.X/918875797550.X/918875797558.X/918875797559.T/IUDFW,1991/10/15,SUN.Q/0136/15SEP/KWW/I.W/PLMW/1/SPI.H/XZTK.
.X/918875797551.T/BJYE,1991/10/15,SUN.Z/0136/03MAR/KWW/I.L/PLMW/1/SPI.H/XZTK.


П.С.:Предполагается, что начальные пробелы являются опечаткой. Кроме того, ваша первая строка в сценарии с несколькими шаблонами, ваш вывод не соответствует вашему вводу.

0
18.03.2021, 22:32

Теги

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