Показать определенные строки, используя только начало и конец

У вас окончание строк в стиле Windows -.

Команда «нет» -:вместо этого читается как :, отображается как :\rили более полно как $':\r'.

Запустите dos2unix scriptname, и все будет в порядке.


Если у вас нет dos2unix, следующее должно работать почти везде (, и я тестировал MobaXterm в Windows):

vi -b filename

Затем в viвведите:

:%s/\r$//
:x

Можете идти.


В vim, который вы используете в Cygwin для vi, есть несколько способов сделать это. Другой включает настройку fileformat, которая может принимать значения dosили unix.Либо явно измените его после загрузки файла с помощью

set fileformat=unix

, либо явно форсируйте формат файла при записи файла с помощью

:w +fileformat=unix

.

Для получения дополнительной информации см. множество вопросов и ответов, посвященных этой теме, в том числе:

0
09.11.2019, 01:06
2 ответа

Использование средства MULTIOS в оболочке zsh:

$ head -n 7 file | tail -n 5 > >( head -n 1 ) > >( tail -n 1 )
line 3
line 7

То есть извлеките строки с 3 по 7 с помощью head -n 7 file | tail -n 5, а затем получите первую и последнюю строку этого.

В bashэто будет эквивалентно

$ head -n 7 file | tail -n 5 | tee >( head -n 1 ) | tail -n 1 
line 3
line 7

, который дополнительно использует teeдля дублирования данных.

2
28.01.2020, 02:21
head -n3 input | tail -n1; head -n7 input | tail -n1

используйте headдля получения первых трех строк, затем tailтолько последнюю 1. Затем используйте headдля получения первых семи строк и tailтолько последнюю 1.

Обратите внимание, что на самом деле это две команды, разделенные ;, это может быть возможно в одной команде, но я не уверен, как это сделать.

Возможно, было бы лучше использовать sed:

sed -n '3p;7p' input

Если это должна быть одна команда, сделайте свою собственную команду (функцией):

get_lines () {
    local input=$1
    shift
    for line; do
        head -n "$line" "$input" | tail -n 1
    done
}

Вы бы назвали это как:

$ get_lines input 3 7
This is line 3
This is line 7

Где input— имя вашего файла. Это также будет принимать столько номеров строк, сколько вы хотите:

$ get_lines input 1 3 5 7 9
This is line 1
This is line 3
This is line 5
This is line 7
This is line 9
2
28.01.2020, 02:21

Теги

Похожие вопросы