regex 仅在特定行之间使用sed

q7solyqu  于 2023-03-20  发布在  其他
关注(0)|答案(3)|浏览(138)

我使用这个sed命令来删除逗号后面的空格。

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

我怎么能改变它,它将只在特定的行号之间进行修改。
(e.g.在第二和第三行之间)。

zqry0prt

zqry0prt1#

用途:

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

这将仅在编号为2到3(含)的行中应用正则表达式/,\s\+/,并将匹配替换为,

ecbunoof

ecbunoof2#

由于OSX(BSD sed)与Linux(GNU)sed存在一些语法差异,因此我想从我的一些来之不易的注解中添加以下内容:
OSX(BSD)SED查找/替换同一文件中的(地址)块(起点和终点模式(/../)或行号)(通过& via &通过&第4.20节here):
语法:

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

希望这对某人有帮助!

yrefmtwq

yrefmtwq3#

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

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

相关问题