简体   繁体   中英

Using sed between specific lines only

I have this sed command for removing the spaces after commas.

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

How can i change it that, it will make the modification between only specific line numbers.

(eg between second and third lines).

Use:

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

This will apply the regex /,\s\+/ only in the lines numbered 2 to 3 (inclusive) and substitute the match with , .

Since OSX (BSD sed) has some syntax differences to linux (GNU) sed, thought I'd add the following from some hard-won notes of mine:

OSX (BSD) SED find/replace within (address) block (start and end point patterns(/../) or line #s) in same file ( via & via &via & section 4.20 here ):

Syntax:

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

Standard find/replace examples:

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

Find/replace example with complex operator and grouping (cannot operate without grouping syntax due to stream use of standard input). All statements in grouping must be on separate lines, or separated w/ semi-colons:

Complex Operator Example (will delete entire line containing a match):

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

Multi-file find + sed:

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

Hope this helps someone!

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM