Sed 如何自动创建目录树列表的README.md标记
我想用目录树列表自动创建降价,以便在每个目录中显示在像GitHub这样的在线repo中 因此,考虑到我将使用可通过Sed 如何自动创建目录树列表的README.md标记,sed,tree,directory,markdown,github-flavored-markdown,Sed,Tree,Directory,Markdown,Github Flavored Markdown,我想用目录树列表自动创建降价,以便在每个目录中显示在像GitHub这样的在线repo中 因此,考虑到我将使用可通过brew安装树安装在MacOS X上的(有关详细信息,请参阅),我提出了以下解决方案: tree --dirsfirst --noreport -I README.md > README.md;sed -i '' '1s/^/```/' README.md;echo \ >> README.md; sed -i '' -e '$s/$/```/' README.md
brew安装树安装在MacOS X上的(有关详细信息,请参阅),我提出了以下解决方案:
tree --dirsfirst --noreport -I README.md > README.md;sed -i '' '1s/^/```/' README.md;echo \ >> README.md; sed -i '' -e '$s/$/```/' README.md
其中第一个sed-i''1s/^/`/`/'README.md
在`
字符前面–有关支持的标记的详细信息,请参阅
echoecho\>>README.md代码>正在添加换行符。这里请注意,我没有使用等效的sed
文件名sed-I'-e'$a\'filename
,因为这只会在由于$a
模式而不存在时添加新行(请参阅)
而最后一个sed-i'-e'$s/$/`/`README.md
正在向文件中添加一个尾部`
tree
命令tree--dirsfirst--noreport-I README.md
将排除一些模式,将目录放在第一位,忽略报告文件和目录计数
结果如下所示:
```.
├── bin
│ ├── Debug
│ │ ├── SampleLibrary.jar
│ │ ├── cooper.jar
│ │ ├── sugar.data.jar
│ │ ├── sugar.jar
│ │ └── swift.jar
│ └── Release
│ ├── SampleLibrary.jar
│ ├── cooper.jar
│ ├── sugar.data.jar
│ ├── sugar.jar
│ └── swift.jar
├── obj
│ ├── Debug
│ │ └── Android
│ │ ├── ClassLibrary2.elements.FilesWrittenAbsolute.txt
│ │ └── samplelibrary.jar
│ └── Release
│ └── Android
│ ├── ClassLibrary2.elements.FilesWrittenAbsolute.txt
│ └── samplelibrary.jar
├── ClassLibrary2.elements
└── ClassLibrary2.elements.user
```
您可以看到这个markdown README.md
此解决方案效率不高,仅限于树的-I
模式选项来过滤不需要的目录(比如构建目录)或文件名等。此外,更新现有的README.md
标记也无法正常工作
该解决方案应适用于MacOS X(其中sed与Linux上的有所不同)。获取源代码标记的一种方法是将所有内容缩进四个空格:
tree --dirsfirst --noreport -I README.md | sed 's/^/ /' > README.md
要按您的方式进行,请在每行添加一个新的第一行和最后一行,每个行上都有`
,我们可以这样做
tree --dirsfirst --noreport -I README.md |
sed '1s/^/```'$'\n''/;$s/$/'$'\n''```/' > README.md
其中,在替换字符串中插入换行符是通过C样式转义完成的。或者,我们可以使用“$(printf'\n')”
:
这两者都应该与macOS上的sed一起工作
有了GNU sed,情况会简单一些:
tree --dirsfirst --noreport -I README.md |
sed '1s/^/```\n/;$s/$/\n```/' > README.md
看看(我是作者)
它动态生成描述性目录树,并具有如下标记导出格式:
```.
├── bin
│ ├── Debug
│ │ ├── SampleLibrary.jar
│ │ ├── cooper.jar
│ │ ├── sugar.data.jar
│ │ ├── sugar.jar
│ │ └── swift.jar
│ └── Release
│ ├── SampleLibrary.jar
│ ├── cooper.jar
│ ├── sugar.data.jar
│ ├── sugar.jar
│ └── swift.jar
├── obj
│ ├── Debug
│ │ └── Android
│ │ ├── ClassLibrary2.elements.FilesWrittenAbsolute.txt
│ │ └── samplelibrary.jar
│ └── Release
│ └── Android
│ ├── ClassLibrary2.elements.FilesWrittenAbsolute.txt
│ └── samplelibrary.jar
├── ClassLibrary2.elements
└── ClassLibrary2.elements.user
```
├── 代码>示例文件夹\
│ ├── 代码>第一个子文件夹\
文档化文件夹
│ │ ├── 代码>sub-sub1\
│ │ │ └── 文件3.sh
这是文件3
│ │ ├── 代码>sub-sub2\
│ │ │ └── 文件4.cpp
这是文件4
│ │ └── random_file.rdm
文件化文件
│ ├── 代码>第二个子文件夹\
\u文件化文件夹
│ ├── 文本文件.txt
文本文件
│ ├── my_javascript.js
这是文件1
│ └── test.py
python脚本
└── README.md
主自述文件\
当然还有ASCII码
.
├── example_folder\
│ ├── first_subfolder\ (a documented folder)
│ │ ├── sub-sub1\
│ │ │ └── file3.sh (this is file 3)
│ │ ├── sub-sub2\
│ │ │ └── file4.cpp (this is file 4)
│ │ └── random_file.rdm (a documented file)
│ ├── second_subfolder\ (a documented folder with no documented files)
│ ├── a_text_file.txt (a text file)
│ ├── my_javascript.js (this is file 1)
│ └── test.py (a python script)
└── README.md (The main readme)
为什么要费事进行后处理以获取括号中的标记?为什么不前后呼应一下呢<代码>{echo'``;tree…;echo'`;}>README.md
?使用带有4个空格的制表符是一种替代解决方案,至少可以在Github标记上工作。在MacOS X
上,我们应该使用-i'
使其工作。@loretoparisi我认为不需要-i'
,因为我们没有在适当的位置工作README.md
由于重定向而被截断,而sed只从管道读取输入并写入先前截断的文件。