Командная строка Linux: разбить строку - PullRequest
3 голосов
/ 28 августа 2009

У меня есть длинный файл со следующим списком:

/drivers/isdn/hardware/eicon/message.c//add_b1()
/drivers/media/video/saa7134/saa7134-dvb.c//dvb_init()
/sound/pci/ac97/ac97_codec.c//snd_ac97_mixer_build()
/drivers/s390/char/tape_34xx.c//tape_34xx_unit_check()
(PROBLEM)/drivers/video/sis/init301.c//SiS_GetCRT2Data301()
/drivers/scsi/sg.c//sg_ioctl()
/fs/ntfs/file.c//ntfs_prepare_pages_for_non_resident_write()
/drivers/net/tg3.c//tg3_reset_hw()
/arch/cris/arch-v32/drivers/cryptocop.c//cryptocop_setup_dma_list()
/drivers/media/video/pvrusb2/pvrusb2-v4l2.c//pvr2_v4l2_do_ioctl()
/drivers/video/aty/atyfb_base.c//aty_init()
/block/compat_ioctl.c//compat_blkdev_driver_ioctl()
....

Содержит все функции в коде ядра. Обозначение: file//function.

Я хочу скопировать около 100 файлов из каталога ядра в другой каталог, поэтому я хочу убрать каждую строку из имени функции, оставив только имя файла.

Это очень легко в Python, есть идеи, как написать 1-строчную строку в командной строке bash, которая добивается цели?

Спасибо

Уди

Ответы [ 3 ]

9 голосов
/ 28 августа 2009
cat "func_list" | sed "s#//.*##" > "file_list"

Не запускал:)

6 голосов
/ 28 августа 2009

Вы можете использовать чистый Bash:

while read -r line; do echo "${line%//*}"; done < funclist.txt

Редактировать:

Синтаксис команды echo делает то же самое, что и команда sed в ответе Юджина: удаление «//» и всего, что следует после.

Разбит:

"echo $ {line}" совпадает с "echo $ line"
«%» удаляет шаблон, который следует за ним, если он соответствует завершающей части параметра
«%» - самое короткое совпадение, «%%» - самое длинное из возможных
«// *» - шаблон для сопоставления, «*» аналогичен sed s. * "

См. Раздел «Расширение параметров» на странице Bash man для получения дополнительной информации, включая:

  • с использованием ${parameter#word} для сопоставления начала параметра
  • ${parameter/pattern/string} сделать sed стиль замены
  • ${parameter:offset:length} для извлечения подстрок
  • и т.д.
4 голосов
/ 29 августа 2009

вот один вкладыш в (г) awk

awk -F"//" '{print $1}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...