Использование sed только между определенными строками

У меня есть эта команда sed для удаления пробелов после запятых.

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

Как я могу изменить это, это сделает модификацию только между конкретными номерами строк.

(например, между второй и третьей строках).

3 ответов


использование:

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

поскольку OSX (BSD sed) имеет некоторые синтаксические различия с linux (GNU) sed, я подумал, что добавлю следующее из моих с трудом выигранных заметок:

OSX (BSD) sed найти/заменить в блоке (адрес) (шаблоны начальной и конечной точек(/../ ) или строка #s) в том же файле (via & 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

Find / replace example with complex operator and grouping (не может работать без синтаксиса группировки из-за использования потока стандартного ввода). Все операторы в группировке должны быть на отдельных строках или разделены полуколонами:

пример сложного оператора (удалит всю строку, содержащую совпадение):

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

надеюсь, это поможет кому-то!


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

эта версия может быть полезна, если позже вы захотите добавить больше команд для обработки нужных строк.