Можно ли сопоставить несколько конкретных номеров строк (не диапазон) с sed?

Рассматривать:

echo -e "a\nb\nc\nd\ne\nf\ng\nh" | sed '3,5a test' 

Это будет соответствовать строкам 3, 4 и 5.

Но я пытаюсь сопоставить только строки 3 и 5 (не 4). И добавьте «тест» после них.

3 Solutions collect form web for “Можно ли сопоставить несколько конкретных номеров строк (не диапазон) с sed?”

 echo ... | sed -e '3a test' -e '5a test' 

Если операция более сложная, чем в этом случае, вы можете использовать такую ​​структуру:

 sed 'b pattern; : action; a \ lalala b end; : pattern; 3b action; 5b action; : end' 

Т.е. вы ставите все команды, которые вам нужны между b pattern; и b end; ,

И вы добавляете все ваши шаблоны (номера строк или что-то еще) после : pattern; ,

Что происходит, так это:

  1. Первая команда перескакивает над частью действия (возможно, ее легче читать, если шаблоны находятся в начале и b end; непосредственно перед частью действия).

  2. Если шаблон совпадает, то выполнение переходит к части действия. После выполнения действия часть выполнения переходит к завершению.

Я стараюсь убрать это:

 sed '3b action; 5b action; b end; : action; a \ lalala : end' 

В одной строке было бы:

 sed "3b idAction; 5b idAction; b; : idAction; a test" 

В переносном смысле вам нужно написать:

 sed ' 3b action 5b action b : action a\ lalala' 

( b без ветвей ярлыков до конца, так что вам не нужна явная метка end , – допустим символ в метке в стандартных реализациях sed ).

С sed (см. Ответ @ HaukeLaging)

С awk :

 $ echo -e "a\nb\nc\nd\ne\nf\ng\nh" | awk 'NR==3 || NR==5{$0=$0"\ntest"}1;' 

С perl :

 $ echo -e "a\nb\nc\nd\ne\nf\ng\nh" | perl -pe '$_ .="test\n" if $. == 3 || $. == 5' 

Как сказал @HaukeLaging aleady, эта команда делает то, что вы хотите:

 sed -e'3a test' -e'5a test' 

Теперь это может стать довольно громоздким, если вы хотите совместить, например, 20 строк.

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

 sed -e{3,5}'a test' 

(Обратите внимание, что фигурные скобки и запятая должны оставаться без кавычек.)

В результате оболочка передаст аргументы в -e3a test и -e5a test для sed, что и делает первая команда.

  • Удаление строк, содержащих указанную строку в разных файлах
  • Извлечение текста с помощью sed не работает должным образом
  • Как заменить значение для данного условия в определенном столбце файла
  • замените n-й столбец csv-файла с помощью таблицы поиска
  • sed one-liner для удаления любой строки, которая не содержит строчных букв
  • Использование sed для замены слов
  • sed: вставьте sth перед последующими строками, которые начинаются одинаково, но не совпадают
  • Как извлечь строки между одинаковыми шаблонами из файла
  • Есть ли альтернатива команде «sed -i» в Solaris?
  • sed - найти строку из 4 чисел с предшествующим символом и добавить символ
  • как разбить строку после сопоставления определенного символа с помощью команды оболочки?
  • Interesting Posts

    Извлечь диаграмму соответствия n-й линии и следующие N строк

    Подключение к серверу dnsmasq извне

    Почему я не могу изменить имя хоста моего сервера с помощью sudo?

    включить эхо-сервис и проблемы безопасности в Linux

    Каков наиболее эффективный / безопасный способ пользователя для входа на серверы Linux с использованием SSH-ключей?

    Поддерживает ли `less` или` more` ansi escape `\ x1b [2K` (erase_line)?

    скрипт ~ / .bashrc корректно запускается в ssh, корректно работает с источником ~ / .bashrc

    Почему Linux на архитектуре sparc64 использует 32-разрядные указатели в пользовательском пространстве и 64-битные указатели в пространстве ядра?

    Процесс, выполняемый как root, при выполнении mount, устанавливается для `self`, как сделать mount глобальным?

    Остановить конфигурацию ssh при первом совпадении

    Использование mailx без сохранения пароля

    Как установить PATH или другие переменные среды, чтобы X приложения могли получить к нему доступ?

    Как временно переключаться между клавиатурами на KDE Plasma 5?

    Crunner сбой после ввода трех букв

    Как называется технология, которая мгновенно загружается в Linux из Windows?

    Linux и Unix - лучшая ОС в мире.