Не могли бы вы отредактировать ваш вопрос и добавить выход `гора`, пожалуйста? Я подозреваю, что имелось в виду разубедить фанатиков, которые утверждают, что окна такое бедный человек в Linux. Они разные операционные системы с разными корнями - не следует считать "бедной" версии другой. Я немного смущен, потому что это кажется очень коротким. Каковы вы просмотра от. Где картинки в Mac? Вы хотите только эта функция локально? @0942v8653 ты сделал это! Огромное спасибо! Я не думал, что это возможно. Я просто удалил ком.яблоко.док.plist из /Пользователи/avtraino/библиотека/настройки/ и перезапустить. Я понятия не имею, в чем была проблема, но сейчас все хорошо! Спасибо всем. эти инструкции являются неполными, в лучшем случае - plist файлы появляются, чтобы быть от мобильных версий, есть и другие проблемы в процессе, в том числе Сьерра-позволяет редактировать файлы в /System папку/библиотеки/LaunchDaemon

Если мы можем предположить, что любая линия только 2 поля должны иметь пустую строку убрать, вы можете сделать следующее в Perl:

$ Перл -Ф"\|" -Лейн '$#Ф==1 ? е : файл для печати'.КШМ 
001|Бейкер Лондон|3|4|7
002|Пенни LaneLiverpool|88|5|7

Важная оговорка: как отметил в комментариях Стефана Chazelas, это предполагает, что ваш ввод не содержит каких-либо % персонажей, поскольку, если это произойдет, будут приняты как спецификатор формата для функции printf. Это может привести к нежелательным последствиям, начиная от простого печатания ошибается на выходе к еде загружает оперативной памяти, если ваш вклад как-то глупо, как %02147483600f%02147483600f%02147483600f%02147483600f.

Объяснение

  • : что делает Перл действовать, как на awk, разделение каждой входной линии на персонаже дана (Итак, | здесь, который должен быть экранированы В \| С | означает " или " в регулярных выражениях Perl) и сохранение результата в массив .
  • : это удаляет конечные символы новой строки из каждой строки ввода и добавляет т каждая печать вызова.
  • -нэ : читать входной файл построчно и применить скрипт, приведенный к в каждой строке.
  • $#Ф==1 ? е : принт' : на $#Ф переменной является количество элементов в массиве , так что число полей. Это, следовательно, означает, что если количество полей равно 1, то е (которая будет печатать текущую строку без символа новой строки, поскольку существующий был удален и Е не добавить). Если число полей не ровно 1, печать линии (которых, из-за будет добавить перевод строки).

То же самое может быть расширена:

$ на Perl -е 'а($строки=<значение stdin>){
 гусеничка $линии; 
 @поля=сплит(/\|/,$строка); 
 если(скаляр(@поля) == 2){
 печать "$строка";
 } 
еще{
 печать "$строка\Н"
}
 }' < файл.КШМ 
001|Бейкер Лондон|3|4|7
002|Пенни LaneLiverpool|88|5|7

И даже более короткий вариант, предложенный @Сандип в комментариях:

гусеничка на Perl -е'\|' -Апэ 'ли $#Ф==1'