UNIX sed команда help - PullRequest
       6

UNIX sed команда help

1 голос
/ 25 июня 2011
    sed -n '$'!p abc.txt | tail +2 > def.txt

У меня есть вышеупомянутая команда sed в моем коде - я не могу понять, что она делает.выяснить, что он делает - спасибо

Ответы [ 2 ]

2 голосов
/ 25 июня 2011

Что касается команды sed '$'!p:

  • $ соответствует только последней строке входного файла.
  • ! сводит на нет смысл совпадения (так, чтобы оно совпадало со всеми , но последней строкой).
  • p распечатывает все, что было найдено.

Так что в основном это печатает все, кроме последней строки файла.

Опция -n останавливает sed от выполнения действия по умолчанию (для печати пространства шаблона) - без этого вы получите одну копию последней строки и две копии всех остальных строк.

Кавычки вокруг $ должны помешать оболочке пытаться интерпретировать ее как переменную оболочки - я бы сам процитировал лот ('$!p'), но это проблема стиля, по крайней мере для bash. Другие оболочки, такие как csh (для извлечения истории команд используется !), могут быть не такими уж простыми.

2 голосов
/ 25 июня 2011

Делая это поэтапно:

sed -n abc.txt    

«Запустите abc.txt через sed, но ничего не печатайте».

sed -n '$!p' abc.txt

(Обратите внимание, что я исправил неуместную кавычку).

«Пропустить abc.txt через sed; если строка не является последней строкой, выведите ее (то есть выведите все, кроме последней строки).»

Полагаю, вы знаете все остальное, но обратите внимание, что tail +2 является устаревшим синтаксисом - tail -n 2 будет лучше.

EDIT:

Чтобы удалить последние две строки, попробуйте

sed 'N;$d'

или, если это не сработает, грубо, но эффективно:

sed '$d' | sed '$d'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...