Одно использование решения perl
:
Содержание script.pl:
use warnings;
use strict;
## Acept one argumnet, the input file.
@ARGV == 1 or die qq[Usage: perl $0 input-file\n];
while ( <> ) {
## Remove last '\n' char.
chomp;
## Split line with string 'ASDFASDF22'
my @f = split /(ASDFASDF22)/;
## Print line but print first 49 chars plus a space of the special string.
printf qq[%s%-50s%s\n],
join( qq[], @f[0,1] ),
substr( $f[2], 0, 49 ) . qq[ ],
join( qq[], @f[3..$#f] );
}
Выполните сценарий:
perl script.pl infile
И вывод:
1653455 ASDFASDF22 bla bla bla asd xmv ASDFASDF22 AA
1944444 ASDFASDF22 klasdfmxvl yxklc erisa ask xdk asdm ase ASDFASDF22 BB
1984945 ASDFASDF22 jklyck aklsdfl asfjasl asdkkcii wdkkkxd aslasl w ASDFASDF22 BB
Для фона:
Сначала давайте займемся функцией их. Поскольку ссылка видит Усовершенствованное Руководство по созданию сценариев Bash.
2>&-
Общая форма этого M>&-
, где "M" является числом дескриптора файла. Это закроет вывод для того, какой бы ни на дескриптор файла ссылаются, т.е. "M".
2>/dev/null
Общая форма этого M>/dev/null
, где "M" является числом дескриптора файла. Это перенаправит дескриптор файла, "M", к /dev/null
.
2>&1
Общая форма этого M>&N
, где "M" и "N" являются числами дескриптора файла. Это комбинирует вывод дескрипторов файлов "M" и "N" в единый поток.
|&
Это - просто сокращение для 2>&1 |
. Это было добавлено в Bash 4.
&>/dev/null
Это - просто сокращение для >/dev/null 2>&1
. Это перенаправляет дескриптор файла 2 (STDERR) и дескриптор 1 (STDOUT) к /dev/null
.
>/dev/null
Это - просто сокращение для 1>/dev/null
. Это перенаправляет дескриптор файла 1 (STDOUT) к /dev/null
.
Я не имел дело очень с другими оболочками за пределами csh
и tcsh
. Мой опыт с теми 2 по сравнению с операторами перенаправления удара, то, что удар выше в том отношении. Дополнительную информацию см. в tcsh странице справочника.
Из команд Вы не спросили ни об одном, непосредственно поддерживаются csh/tcsh. Необходимо было бы использовать различные синтаксисы для построения подобных функций.
Это для перенаправления STDERR & STDOUT:
2>/dev/null
Перенаправьте STDERR к/dev/null (препятствуйте обнаружиться на консоли),
|&
Перенаправьте STDERR и STDOUT к STDIN переданной по каналу команды (cmd1 | и cmd2)
&>/dev/null
Перенаправьте обе STDERR & STDOUT к/dev/null (ничто не обнаруживается на консоли),
>/dev/null
Перенаправьте STDOUT к/dev/null (только шоу STDERR на консоли)
2>&-
Для закрытия дескриптора файла, используемого с перенаправлением
Это все стандартные методы перенаправления для Оболочек Bourne.
Считайте это дополнением к выбранному ответу. Вы можете захотеть узнать, какие формы соответствуют POSIX, а какие нет.
Задействованы две формы POSIX:
2.7.2 Redirecting Output
The two general formats for redirecting output are:
[n]>word
[n]>|word
where the optional n represents the file descriptor number. If the number is omitted, the redirection shall refer to standard output (file descriptor 1).
Output redirection using the '>' format shall fail if the noclobber option is set (see the description of set -C) and the file named by the expansion of word exists and is a regular file. Otherwise, redirection using the '>' or ">|" formats shall cause the file whose name results from the expansion of word to be created and opened for output on the designated file descriptor, or standard output if none is specified. If the file does not exist, it shall be created; otherwise, it shall be truncated to be an empty file after being opened.
-
2.7.6 Duplicating an Output File Descriptor
The redirection operator:
[n]>&word
shall duplicate one output file descriptor from another, or shall close one. If word evaluates to one or more digits, the file descriptor denoted by n, or standard output if n is not specified, shall be made to be a copy of the file descriptor denoted by word; if the digits in word do not represent a file descriptor already open for output, a redirection error shall result; see Consequences of Shell Errors. If word evaluates to '-', file descriptor n, or standard output if n is not specified, is closed. Attempts to close a file descriptor that is not open shall not constitute an error. If word evaluates to something else, the behavior is unspecified.
Поэтому:
Function POSIX-compat POSIX
2>&- Yes close
2>/dev/null Yes redir
2>&1 Yes dup
|& No
&>/dev/null No
>/dev/null Yes redir
>&/dev/null ? ?dup
Последней строки нет в исходном вопросе, но в bash она работает без нареканий. (Также работает с заменой /dev/tty на /dev/null ).
2>&-
по сравнению с2>/dev/null
(кроме этого не понимают некоторые "плохо" записанные программы2>&-
правильно)? – Det 06.04.2013, 17:38&>
был вbash
от запуска (и повреждения Bourne и совместимость POSIX, поскольку это означает что-то другое там, хотя вряд ли будет поражен).>&
и|&
произойдите из(t)csh
(и это - их единственный способ перенаправить stderr). Они были вzsh
от запуска и были только недавно добавлены кbash
.См. такжеrc
для лучше разработанных операторов. – Stéphane Chazelas 24.10.2014, 12:26(+2-2=0)
. Теперь, к части выпуска, я не редактирую много, но в этом случае я был бы, потому что она разъясняет, что данные после операции были бы вN
. Я считал Вас ответ через, и он прекрасен очень во всех аспектах. Просто эта маленькая неоднозначность получила меня взгляды, именно поэтому выпуск. Но хорошо, не стесняйтесь повторно добавлять или отклонять его, как Вы будете. Я надеюсь, что мог объяснить идею.Так держать. – Dr Beco 01.05.2017, 21:45