Иначе должен сделать function
для ssh
:
function ssh(){ /usr/bin/ssh $@ ; exit ; }
К сожалению, это также будет всегда закрывать соединение и выход из системы от консоли после окончания работы над удаленной системой.
Обратите внимание на то, что Вы должны сделать такую функцию во всех своих серверах, иначе этот взлом не будет работать. Btw можно всегда помещать функцию в ~/.bashrc или ~/.whatever_shell_you_use_rc.
Это смотрит немного грязный взлом по сравнению с путем uther.
Perl:
perl -ne 'for$i(0..3){print}' file
и я должен добавить, что этот отправил как комментарий @derobert, потому что это просто прохладно:
perl -ne 'print "$_" x4'
awk
и варианты:
awk '{for(i=0;i<4;i++)print}' file
bash
while read line; do for i in {1..4}; do echo "$line"; done; done < file
Интересно, превращается ли это в соответствие гольфа:
sed 'p;p;p'
awk '1;1;1;1'
perl -lpE 'say;say;say' # if Paul McCartney and Michael Jackson were hackers...
Объяснение:
sed's p
команда должна распечатать текущую строку. Поведение по умолчанию состоит в том, чтобы распечатать текущую строку прежде, чем переместиться в следующую строку (вот почему sed, имеет -n
позволить Вам выключать его). Некоторые более старые семена не имеют точки с запятой (я думаю), таким образом, возможно, что Вам, возможно, придется сделать sed -e p -e p -e p
Awk работает с condition {action}
пары. Если действие опущено, значение по умолчанию должно распечатать текущую строку, если условие возвращает true. Awk, как многие подобные языкам C, обработки 1
как верный. (Для полноты, если условие опущено, действие будет выполняться для каждой записи.)
Много функций жемчуга используют в своих интересах переменную "по умолчанию". Эта острота эквивалентна (на жемчуге 5.16):
$ perl -MO=Deparse -lpE 'say;say;say'
BEGIN { $/ = "\n"; $\ = "\n"; }
use feature 'current_sub', 'evalbytes', 'fc', 'say', 'state', 'switch', 'unicode_strings', 'unicode_eval';
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
say $_;
say $_;
say $_;
}
continue {
die "-p destination: $!\n" unless print $_;
}
1
в awk? Сокращение от print $0
? А-ч
– terdon♦
05.07.2013, 19:15
1
(верный); блок по умолчанию эквивалентен {print}
. Так оператор 1
означал бы печатать текущий буфер строки ({print}
). ({print}
и {print $0}
главным образом то же, что и требовалось доказать.)
– Arcege
05.07.2013, 20:49
sed
это не поддерживает точки с запятой как разделители команды; есть ли действительно такая вещь?
– Wildcard
06.05.2016, 19:41
sed -n '{p;p;p;p;}' file
awk '{print;print;print;print;}' file
Используя просто окружите:
repeats=4
while read line; do yes $line|head --lines=$repeats; done < infile > outfile
--help
как строка вместо опции? [рассмотрите случай где line
--help
или другая опция]
– user176581
06.07.2013, 18:41
Это могло бы работать на Вас (GNU sed):
sed 'h;:a;s/[^\n]\+/&/4;t;G;ba' file
Повторит каждую строку 4 раза.
Или если Вы предпочитаете:
sed 'h;:a;s/\n/&/3;t;G;ba' file
Где Вы повторяете каждую строку еще 3 раза.
Можно сделать это без требования sed
, perl
, или awk
.
$ for i in `cat <file>` ; do seq <#> <#> | xargs -i -- echo $i ; done
или использование некоторое время цикл:
$ while read i ; do seq <#> <#> | xargs -i -- echo $i ; done < <file>
$ for i in `cat sample.txt` ; do seq 1 3 | xargs -i -- echo $i ; done
a
a
a
b
b
b
c
c
c
цикл с условием продолжения
$ while read i; do seq 1 2| xargs -i -- echo $i;done < sample.txt
a
a
b
b
c
c
Ответ @potong не работает с пустыми строками, замена \+
на *
должна это исправить:
sed 'h;:a;s/[^\n]*/&/4;t;G;ba' file
awk
for
не нуждается в фигурных скобках, если существует только одна команда для повторения. Иperl
более просто, если Вы используетеforeach
цикл:for$i(0..3){print}
. – manatwork 05.07.2013, 19:38perl -ne 'print(($_)x4)'
. Кроме того, необходимо заключить в кавычки$line
(в эхе) в Вашей версии удара. – derobert 05.07.2013, 19:46BEGIN { ORS="\r\n" }
– The Red Pea 27.10.2015, 19:16