Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
Regex 仅在特定行之间使用sed_Regex_Unix_Sed - Fatal编程技术网

Regex 仅在特定行之间使用sed

Regex 仅在特定行之间使用sed,regex,unix,sed,Regex,Unix,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在同一文件(第4.20节)的(地址)块

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

 sed -e 's/,\s\+/,/g' example.txt
我如何改变它,它将只在特定行号之间进行修改

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

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

使用:

sed '2,3s/,\s\+/,/g' example.txt
由于OSX(BSD sed)与linux(GNU)sed有一些语法上的差异,我想从一些来之不易的笔记中添加以下内容:

OSX(BSD)SED在同一文件(第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
$ find ./ -type f -name '*.html' | xargs sed -i '' '/<head>/,/<\/head>/ {/pattern/d; /pattern2/d;}'
使用复杂运算符和分组查找/替换示例(由于使用标准输入流,没有分组语法无法操作)。分组中的所有语句必须在单独的行上,或使用分号分隔:

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

$ 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
$ find ./ -type f -name '*.html' | xargs sed -i '' '/<head>/,/<\/head>/ {/pattern/d; /pattern2/d;}'
多文件查找+sed:

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

希望这对别人有帮助

调用sed时,这些特定行号是已知的,还是文件中存在依赖于数据本身的区域?就像sed应该只在某些开始和结束标记之间处于活动状态一样?在这种情况下,我将使用
awk
,因为您可以在行之间保留状态变量。我怀疑这里有好的信息。但我必须承认,我不明白发生了什么。我不明白为什么
!b
存在,以及它们在以后如何发挥作用。也许你可以解释一下。