LINUX.ORG.RU

преобразование строк в нужный вид

 


0

1

Доброе время суток. Помогите пожалста решить маленькую проблемку, имеется файл, куда я складываю uid и имя файлов, разделенных табуляцией, вот такого вида: ... 10 uucp 11 operator 12 games 13 gopher 14 ftp 99 nobody 28 nscd 69 vcsa 32 rpc 47 mailnull 51 smmsp ...

а мне хотелось бы преобразовать его в виде скрипта к команде sed: ... s/10/uucp/g s/11/operator/g ....

И т.д. Помогите сформулировать команду, понимаю что тут можно обойтись этим же самым sed, но никак не соображу как это сделать...



Последнее исправление: anryller (всего исправлений: 1)

Ответ на: комментарий от anryller
  1. «^» - начало строки
  2. «\([^ ][^ ]*\)» - один непробельный символ, далее любое количество непробельных симоволов (c extended regex это можно заменить на «[^ ]+»). Скобки делают аргумент доступным во второй части команды.
  3. " *" (два пробела перед звёздочкой) - пробел, далее любое количество пробелов.
  4. см. пункт 2
  5. «$» - конец строки
  6. «\1» - первый аргумент, который был в скобках
  7. ... дальше думаю понятно
Deleted
()
Ответ на: комментарий от Deleted

мм, а можно еще узнать почему, например, вместого того чтобы менять s/524/ivanov/ sed меняет не 524 на ivanov, а 5 меняет на sync, 2 меняет на daemon и так далее, почему он не целиком меняет число на имя пользователя, а разбивает его на отдельные числа?

anryller
() автор топика
Ответ на: комментарий от anryller

Потому что видимо s/5/sync/ у тебя идёт раньше, чем s/524/ivanov/.

Deleted
()
Ответ на: комментарий от Deleted

Ну зачем же так жестоко то? KISS ведь! Back-ref'ы — зло. ;)

sed 's,^,s/,;s,\t,/,;s,$,/g,' < in > out
beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

Преобразование строк в нинужный вид

zorg ★★
()

зато понятно

awk '{print "s/"$1"/"$2"/g"}' < in > out
d ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.