20

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

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

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

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

4

3 回答 3

32

采用:

sed '2,3s/,\s\+/,/g' example.txt
于 2013-04-24T21:57:54.007 回答
8

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

OSX(BSD)SED 在同一文件中的(地址)块(起点和终点模式(/../)或行#s)内查找/替换(此处通过& via & via & 第 4.20 节):

句法:

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

希望这对某人有帮助!

于 2013-04-25T04:27:01.503 回答
1
sed -e '2,3!b;s/,\s\+/,/g' example.txt

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

于 2013-04-24T21:57:45.217 回答