使用正则表达式更新文本文件

时间:2014-06-06 19:50:13

标签: regex macos

我在Mac上,刚开始学习使用正则表达式。我在纯文本文件中保留了很多注释,并且这些注释中包含了主题标签(例如,#tag)。我试图找出如何运行正则表达式来查找我的纯文本文件集合中的所有不同主题标签,并将列表输出到一个文本文件,然后我可以将其用作我的笔记目录。

通过阅读这里的答案,我非常确定正则表达式是用来尝试使这项工作的正确技术,但我缺乏技术词汇来理解可能为我的用例重新组织的类似问题。

我真的很感激被指向正确的方向,一旦我理解了我想问的问题,我就不怕为自己做一些工作。

1 个答案:

答案 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

此文件在文件的不同位置有几个主题标签。

顶部的命令执行以下操作:

  • 查看整个 testFile.txt 文件,将每个空格或标签*替换为新行 \' $' \ n
  • 该单词列表会传递给查找主题标签的 grep
  • 这个hashtagged字列表被传递给第一个翻译字符命令,删除所有空格 tr -d' '
  • 标记的字词列表传递给第一个翻译字符命令,删除所有标签* tr -d' '
  • 最后,整个列表会重定向到 dirNotes.txt 文件。

这会产生一个带有主题标签列表的文件,每行一个:

#test
#MyTest
#TestTwo
#TestThree
#TestFour

由OSX引起的一些技巧。

  • 如何在命令行中添加选项卡? CTRL + V TAB

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