这与我最近提出的another question有关。
我有一个包含多个部分的文本文件。部分文件看起来像这样。
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
部分中的行。 (来自here)
awk '/^## Screenshot/{p=1;print;next} p&&/^##/{p=0};p' readme.md
我通过管道输入上面命令的输出来测试我的命令,它可以工作。
但是现在我想要打印文件的其他行也不受影响。怎么做?
答案 0 :(得分: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