仅在特定行之间使用sed

时间:2013-04-24 21:55:51

标签: regex unix sed

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

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

如何更改它,它将仅在特定的行号之间进行修改。

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

3 个答案:

答案 0 :(得分:20)

使用:

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

答案 1 :(得分:5)

由于OSX(BSD sed)与linux(GNU)sed有一些语法差异,所以我想从我的一些来之不易的笔记中添加以下内容:

OSX(BSD)SED在同一文件(via& via&(via& here&内找到/替换(地址)块(起点和终点模式(/../)或行#s) ; {{3}}& section 4.20 {{3}}):

语法:

$ 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;}'

希望这有助于某人!

答案 2 :(得分:1)

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

如果您以后想要添加更多命令来处理所需的行,则此版本非常有用。