我在Mac上,刚开始学习使用正则表达式。我在纯文本文件中保留了很多注释,并且这些注释中包含了主题标签(例如,#tag)。我试图找出如何运行正则表达式来查找我的纯文本文件集合中的所有不同主题标签,并将列表输出到一个文本文件,然后我可以将其用作我的笔记目录。
通过阅读这里的答案,我非常确定正则表达式是用来尝试使这项工作的正确技术,但我缺乏技术词汇来理解可能为我的用例重新组织的类似问题。
我真的很感激被指向正确的方向,一旦我理解了我想问的问题,我就不怕为自己做一些工作。
答案 0 :(得分:0)
sed 's/\([^\( | \)]*\)/\1\'$'\n/g' testFile.txt | grep \# | tr -d ' ' | tr -d ' ' > dirNotes.txt
给定一个名为 testFile.txt 的文件,内容为:
This is a #test file.
#MyTest
#TestTwo #TestThree #TestFour
此文件在文件的不同位置有几个主题标签。
顶部的命令执行以下操作:
这会产生一个带有主题标签列表的文件,每行一个:
#test
#MyTest
#TestTwo
#TestThree
#TestFour
由OSX引起的一些技巧。
在 sed 命令中,您会看到管道(|)之后的额外空格。这是CTRL + V TAB的结果。
在最后的 tr 命令中,你会看到撇号之间的相同内容。
作为奖励,您可以将其包装在 for 循环中,查看给定目录中的所有.txt文件:
for myFile in `ls *.txt`; do sed 's/\([^\( | \)]*\)/\1\'$'\n/g' $myFile | grep \# | tr -d ' ' | tr -d ' ' > $myFile.ndx; done
您最终会得到一个新的文件列表,其中一些文件的长度可能为零,扩展名为.ndx。每个.ndx文件都包含每个父文件的主题标签。
测试了以下内容:
Software:
System Software Overview:
System Version: Mac OS X 10.5.8 (9L31a)
Kernel Version: Darwin 9.8.0
Boot Volume: Macintosh HD
Boot Mode: Normal
Computer Name: myMac
User Name: Some Dude (mang)
Time since boot: an eon or two