仅在特定行之间使用sed

我有这个sed命令删除逗号后的空格。

sed -e 's/,\s\+/,/g' example.txt 

我怎样才能改变它,它只会在特定的行号之间进行修改。

(例如在第二和第三行之间)。

使用:

 sed '2,3s/,\s\+/,/g' example.txt 

由于OSX(BSD sed)与linux(GNU)sed有一些语法上的差异,我想我会从一些来自我的辛苦的笔记添加以下:

OSX(BSD)SED在同一文件( 通过 & via & via &section 4.20 here )在(地址)块(开始和结束点模式(/../)或行#s)中查找/替换:

句法:

 $ sed '/start_pattern/,/end_pattern/ [operations]' [target filename] 

标准查找/替换示例:

 $ sed -i '' '2,3 s/,\s\+/,/g' example.txt $ sed -i '' '/DOCTYPE/,/body/ s/,\s\+/,/g' example.txt 

使用复杂的运算符和分组查找/替换示例(由于使用标准输入流而不能在没有分组语法的情况下运行)。 分组中的所有语句都必须在不同的行上,或用分号分隔:

复杂的运算符示例(将删除包含匹配的整行):

 $ sed -i '' '2,3 {/pattern/d;}' example.txt 

多文件查找+ sed:

 $ find ./ -type f -name '*.html' | xargs sed -i '' '/<head>/,/<\/head>/ {/pattern/d; /pattern2/d;}' 

希望这可以帮助别人!

 sed -e '2,3!b;s/,\s\+/,/g' example.txt 

如果您稍后想要添加更多命令来处理所需的行,此版本可能会很有用。