我有以下列表的长文件:
/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()
....
Run Code Online (Sandbox Code Playgroud)
它包含内核代码中的所有函数.符号是file//function.
我想将大约100个文件从内核目录复制到另一个目录,所以我想从函数名中删除每一行,只留下文件名.
它在python中非常简单,任何想法如何在bash提示符中编写一个单行程器来实现这一目的?
谢谢,
乌迪
你可以使用纯Bash:
while read -r line; do echo "${line%//*}"; done < funclist.txt
Run Code Online (Sandbox Code Playgroud)
编辑:
该echo命令的语法与sedEugene的答案中的命令相同:删除"//"以及之后的所有内容.
细分:
"echo $ {line}"与"echo $ line"相同
"%"如果匹配参数的尾随部分,则"%"删除后面的模式
"%"使得最短的匹配,"%%"使得最长的
"//*"是要匹配的模式,"*"类似于sed's".*"
有关man详细信息,请参阅Bash 页面的Parameter Expansion部分,包括:
${parameter#word}一个参数的开始匹配${parameter/pattern/string}做sed风格的替换${parameter:offset:length} 检索子串| 归档时间: |
|
| 查看次数: |
15250 次 |
| 最近记录: |