0

这与我最近提出的另一个问题有关。

我有一个包含多个部分的文本文件。文件的一部分看起来像这样。

3. line 3
4. line 4

## Screenshots ##

1. line 1
2. line 2
3. line 3
4. line 4

## Changelog ##

3. line 3
4. line 4

我想转换这个文件,以便文件的所有行都存在于转换后的文件中,并且该screenshot部分中的行在添加到该文件之前通过另一个命令传递。

所以转换后的文件可能看起来像

3. line 3
4. line 4

## Screenshots ##

1. modified 1
2. modified 2
3. modified 3
4. modified 4

## Changelog ##

3. line 3
4. line 4

我有以下命令,它只打印该screenshot部分中的行。(从这里

awk '/^## Screenshot/{p=1;print;next} p&&/^##/{p=0};p' readme.md 

我通过管道连接到上述命令的输出来测试我的命令,它可以工作。

但现在我也想打印文件的其他行而不受影响。怎么做?

4

1 回答 1

1

如果您可以轻松地根据需要修改文本awk(例如,将“line”转换为“modified”),只需直接执行:

awk '/^## Screenshot/{p=1} p{gsub( "line", "modified")} p&&/^##/{p=0}; 1' readme.md

如果由于某种原因在 awk 中进行替换不可行,您可以简单地让 awk 分解输出然后加入:

awk '/^## Screenshot/{f="file2"} 
    f=="file2" && /^##/{f="file3"} 
    {print > f}' f=file1 readme.md
... # Now perform the desired filter on file2
cat file1 file2 file3 > final_output  # Concatenate results
于 2013-05-19T12:12:56.923 回答