Bash SED';被替换的字符串被视为一行字符串,而它包含换行符
我正在测试sed命令,用3行替换一行,然后删除最后一行。(我本可以用前两行来代替它,但这是故意这样说的,以展示主要问题) 假设我有以下文本:Bash SED';被替换的字符串被视为一行字符串,而它包含换行符,bash,shell,sed,Bash,Shell,Sed,我正在测试sed命令,用3行替换一行,然后删除最后一行。(我本可以用前两行来代替它,但这是故意这样说的,以展示主要问题) 假设我有以下文本: // ##OPTION_NAME: xxxx 我想用##OP-NAME替换令牌##OPTION_NAME,并用两行新行围绕它;像这样: // ##OP-START // ##OP-NAME: xxxx // ##OP-END 为了说明这一点,我将此文本放在code.c文件中,并将sed命令放在名为script.sed的sed脚本中 然后,我调用以下sh
// ##OPTION_NAME: xxxx
我想用##OP-NAME
替换令牌##OPTION_NAME
,并用两行新行围绕它;像这样:
// ##OP-START
// ##OP-NAME: xxxx
// ##OP-END
为了说明这一点,我将此文本放在code.c文件中,并将sed命令放在名为script.sed的sed脚本中然后,我调用以下shell命令: Shell命令
# Begin by replacing patterns by their equivalents, surrounding them with ##OP-START and ##OP-END lines
s/\(.*\)##OPTION_NAME:\(.*\)/\1##OP-START\n\1##OP-NAME:\2\n\1##OP-END/g
sed-f script.sed code.c
script.sed
# Begin by replacing patterns by their equivalents, surrounding them with ##OP-START and ##OP-END lines
s/\(.*\)##OPTION_NAME:\(.*\)/\1##OP-START\n\1##OP-NAME:\2\n\1##OP-END/g
问题
现在,我在script.sed中添加了另一个sed命令,以删除包含##OP-END
的行。惊喜所有3行都已删除
# Begin by replacing patterns by their equivalents, surrounding them with ##OP-START and ##OP-END lines
s/\(.*\)##OPTION_NAME:\(.*\)/\1##OP-START\n\1##OP-NAME:\2\n\1##OP-END/g
# Last parse; delete ##OP-END
/##OP-END/d
我尝试了替换命令中的\r\n
而不是\n
s/\(.*)选项名称:\(.*)/\1#OP-START\n\1#OP-NAME:\2\n\1#OP-END/g
,但它不起作用
我还测试了##OP-START
,看看它是否有所不同,
但是,唉!所有3条线也被移除
似乎sed将其视为一条线 这并不奇怪,
d
在模式空间上运行,而不是在每行的基础上运行。使用s
命令修改后,图案空间包含3行。它的内容与表达式匹配,因此被删除
要从图案空间中删除此行,需要再次使用s
命令:
s/\(.*\)##OPTION_NAME:\(.*\)/\1##OP-START\n\1##OP-NAME:\2\n\1##OP-END/g$
s/\n\/\/ ##OP-END//
关于图案和保持空间:这并不奇怪,
d
在图案空间上运行,而不是在每行的基础上运行。使用s
命令修改后,图案空间包含3行。它的内容与表达式匹配,因此被删除
要从图案空间中删除此行,需要再次使用s
命令:
s/\(.*\)##OPTION_NAME:\(.*\)/\1##OP-START\n\1##OP-NAME:\2\n\1##OP-END/g$
s/\n\/\/ ##OP-END//
关于图案和保持空间:有趣!我做了一些测试,我想我明白你的意思了。但是为什么您用
\/\/
预先编写了@@OP-END
(对我不起作用)。相反,我使用了s/\n.*#OP-END/
,效果很好。\n.*
。也许你用了tab而不是空格,多个空格等等,所以我的正则表达式并不有趣!我做了一些测试,我想我明白你的意思了。但是为什么您用\/\/
预先编写了@@OP-END
(对我不起作用)。相反,我使用了s/\n.*#OP-END/
,效果很好。\n.*
。可能您使用了tab而不是空格、多个空格等,因此我的正则表达式不匹配