我想删除从比赛(包括第一场比赛)开始直到第二场比赛(不包括第二场比赛)的部分文件。我的文件是这样的,从another SO question:Sed从比赛中删除,直到比赛结束
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
从the other question的答案我已经采取了sed
命令输出从## Screenshots ##
直到4. line 4
,只是## Changelog ##
之前。但是,我想从文件中删除该部分。
为了澄清,我只知道,接下来的部分将与##
开始,也可能是## foobar ##
就我所知:)
我试图取代像这样
sed -e '/## Screensh/,/##/{/Scree/{d;n};/##/{q};d}' file
通过删除命令的打印命令
但是由于它在第二次匹配后停止输出,在这种情况下为## Changelog ##
(因为退出命令),所以不起作用。我也尝试使用正则表达式字符类来匹配除#
字符之外的任何字符,如sed -n '/## Screenshots ##[^#]*/p'
,但只打印## Screenshots ##
。
难道不是你的解决方案也是一个简单版本的脚本,用于输出与-n一起使用的部分?如:'sed -n'/ ## Screenshot /,/ ##/{/ Screenshot/p;/## /!p}''? – Zsub
是的,也应该在那里工作。 – aragaer
不知道我是否应该重新提问,但我真的想在表达式中使用bash变量。这意味着将引号改为双引号,这反过来又使'''我需要为我的shell转义一个字符,但'sed -i“/ ##屏幕截图$ {var} /,/ ##/{/Screenshot $ {var}/d;/##/\!d}“file'抱怨'\'是一个未知的命令:( – Zsub