我的文件很长,包含以下列表:
/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中这是非常简单的,任何想法如何在bash提示符中写一个单行代码来实现这个技巧?
谢谢,
乌迪
答案 0 :(得分:9)
cat "func_list" | sed "s#//.*##" > "file_list"
没有运行它:)
答案 1 :(得分:6)
您可以使用纯Bash:
while read -r line; do echo "${line%//*}"; done < funclist.txt
修改:
echo
命令的语法与Eugene的答案中的sed
命令做同样的事情:删除“//”以及之后的所有内容。
细分:
“echo $ {line}”与“echo $ line”相同 如果“%”匹配参数
的尾部,则“%”将删除其后面的模式 “%”使得最短的匹配,“%%”使得最长的匹配 “// *”是要匹配的模式,“*
”类似于sed
的“。*
”
有关详情,请参阅Bash man
页面的参数扩展部分,其中包括:
${parameter#word}
匹配参数的开头${parameter/pattern/string}
做sed
- 样式替换${parameter:offset:length}
检索子字符串答案 2 :(得分:4)
这是(g)awk中的一个班轮
awk -F"//" '{print $1}' file