HTTP 1.1 требует, чтобы Вы отправили, по крайней мере, a Host
заголовок в ПОЛУЧАЕТ запросы. Таким образом, минимальный легальный запрос похож на это:
GET http://www.example.com/noise/and/junk HTTP/1.1
Host: www.example.com
(Плюс дополнительный CRLF для завершения раздела заголовка, конечно.)
Могут быть серверы HTTP, которые справятся с запросом, утверждающим потребовать HTTP 1.1, но это не включает a Host
заголовок, но Ваш сервер корректен для отклонения такого запроса.
Host
расширение HTTP 1.1, которое было необходимо для поддержки основанного на имени виртуального хостинга. Если сайт, к которому Вы пытаетесь получить доступ, имеет выделенные серверы (или по крайней мере, специализированный IP), можно безопасно ронять к HTTP 1.0, который позволяет Вам сделать однострочный Запрос HTTP:
GET http://www.example.com/noise/and/junk HTTP/1.0
Одно использование решения 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
Используя массивы удара
while read -r -a words; do
prefix="${words[0]} ${words[1]}"
idx=${#words[*]}
suffix="${words[$((idx-2))]} ${words[$((idx-1))]}"
unset words[0] words[1] words[$((idx-2))] words[$((idx-1))]
middle="${words[*]}"
printf "%s %-50s %s\n" "$prefix" "${middle:0:50}" "$suffix"
done < filename
f=open("filename","r")
a=[]
for line in f:
if line[-1:]=='\n':
line=line[:-1]
a=line.split("ASDFASDF22")
a.insert(1,"ASDFASDF22")
a.insert(len(a)-1,"ASDFASDF22")
k1=len(a[2])
if k1 > 50:
k2=k1-50
k2=k2+1
a[2]=a[2][:-k2]
for i in a:
print i,
else:
k2=50-k1
for i in range(0,len(a)):
if i !=2:
print a[i],
else:
for j in range(0,k2):
a[2]=a[2]+" "
print a[2],
print ""`
Это - наивная реализация в Python. Сохраните это как filename.py и дайте python filename.py
.
Я пробовал скрипт @Birei на текстовом файле, который мне нужно было колонтифицировать, но он провалился, потому что в файле было несколько строк, которые не соответствовали заданному разделителю (и их не нужно было колонтифицировать). Поэтому, с моим плохим знанием perl, я добавил простую проверку размера массива, чтобы избежать обработки несовпадающих строк. Я выложу здесь основной код на случай, если кому-то понадобится это изменение.
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)/;
my $f = @f;
# check array size to avoid errors on non-matching lines
if ($f > 1)
{
## 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] );
}
else
{
# output non-matching line as-is
print $_ . qq[\n];
}
}
Итак, в качестве примера вывода:
1653455 ASDFASDF22 bla bla bla asd xmv ASDFASDF22 AA
1944444 ASDFASDF22 klasdfmxvl yxklc erisa ask xdk asdm ase ASDFASDF22 BB
######################### non-matching line left alone ##########################
1984945 ASDFASDF22 jklyck aklsdfl asfjasl asdkkcii wdkkkxd aslasl w ASDFASDF22 BB
GNU awk:
awk -F "[[:space:]]+ASDFASDF22[[:space:]]+" \
'BEGIN { OFS=" ASDFASDF22 "; }
{
$2 = sprintf("%-50s", substr($2, 0, 50));
print;
}'
while read -r one two line
do printf "%s %s %-50.50s% %s\n" \
"$one" "$two" "${line%%"$two"*}" "$two${line#*"$two"}"
done <<\DATA
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 wqe ASDFASDF22 BB
1984945 ASDFASDF22 jklyck aklsdfl asfjasl asdkkcii wdkkkxd aslasl wqe hjbiub kuvyukvbklhb khuvbukvbuybouin ASDFASDF22 BB
DATA
Вы можете сделать это с большинством любой оболочки POSIX.
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 wqe ASDFASDF22 BB
1984945 ASDFASDF22 jklyck aklsdfl asfjasl asdkkcii wdkkkxd aslasl wqe ASDFASDF22 BB