Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sed 使用BASH脚本,如何根据模式更改行?_Sed_Design Patterns_Lines - Fatal编程技术网

Sed 使用BASH脚本,如何根据模式更改行?

Sed 使用BASH脚本,如何根据模式更改行?,sed,design-patterns,lines,Sed,Design Patterns,Lines,我有一个文件需要处理 ##PAT1## #xxxdx #ddddvdvc ##PAT2## #dsfcdsfd #dsfwf 如果我传递了一个模式,我想删除前导的#字符。因此,如果我通过了######,我想从接下来的两行中删除#(直到下一个模式)-始终在模式后两行。我尝试了sed,但没有成功 感谢使用GNU版本的sed单向: 填充的内容: "##PAT1##" "#xxxdx" "#ddddvdvc" "##PAT2##" "#dsfcdsfd" "#dsfwf" 命令: sed '/^"#

我有一个文件需要处理

##PAT1##
#xxxdx
#ddddvdvc
##PAT2##
#dsfcdsfd
#dsfwf
如果我传递了一个模式,我想删除前导的
#
字符。因此,如果我通过了
######
,我想从接下来的两行中删除
#
(直到下一个模式)-始终在模式后两行。我尝试了
sed
,但没有成功


感谢使用GNU版本的sed

单向:

填充的内容

"##PAT1##"
"#xxxdx"
"#ddddvdvc"
"##PAT2##"
"#dsfcdsfd"
"#dsfwf"
命令:

sed '/^"##PAT1##"/,+2 s/^\("\)#\([^#]\)/\1\2/' infile
输出:

"##PAT1##"
"xxxdx"
"ddddvdvc"
"##PAT2##"
"#dsfcdsfd"
"#dsfwf"

这可能适合您:

sed '/^"##PAT1##/{$!N;$!N;s/#//5g}' file
"##PAT1##"
"xxxdx"
"ddddvdvc"
"##PAT2##"
"#dsfcdsfd"
"#dsfwf

请编辑上面的消息以显示您期望的输出。祝你好运。@tuner
$!N
表示如果当前行不是文件的最后一行,则将换行符和下一行追加到模式空间。