У вас окончание строк в стиле 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
.
Для получения дополнительной информации см. множество вопросов и ответов, посвященных этой теме, в том числе:
Использование средства 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
для дублирования данных.
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