В Bash вы можете использовать файлы псевдоустройства , чтобы открыть TCP-соединение и, как обычно, выполнить grep. Например:
$ grep "sender" < /dev/tcp/example.com/1234
Чтобы проверить это, просто запустите сервер, который может отправить какой-то файл, например:
$ nc -vl 1234 < /etc/hosts
Затем в другом терминале запустите тест для grep
, вывод:
$ grep "127" < /dev/tcp/localhost/1234
127.0.0.1 localhost
Вы можете использовать sed
для получения только чисел и paste
для объединения строк с ,
в качестве разделителя:
sed -E 's/^H([0-9]*).*$/\1/' file | paste -sd,
или grep
иpaste
:
grep -Po '^H\K[0-9]*' file | paste -sd,
grep -o '^H[0-9]*' file | cut -c 2- | paste -sd,
Вы можете заменить разрыв строки с ,
на sed
, но imo paste
проще.
Или sed
/ grep
, используяtr
:
$ sed -E 's/H([0-9]+).*/\1/' file | tr '\n',
$ grep -o '[0-9]\+\s' file | tr -s '\n ',
tr '\n',
заменяет новую строку запятой tr -s '\n ',
заменяет новую строку и пробел одной запятой Я сделал по методу ниже
sed -e "s/H//g" -e "s/\s.*//g" filename | perl -pne "s/\n/,/g"| sed "s/,$//g"
выход
1,337,1106,1129,1370
Пробовал и с Python
import subprocess
import re
k=re.compile(r'\s.*')
u=[]
f=[]
l=open('l.txt','r')
for i in l:
u.append(re.sub("H","",i).strip())
for m in u:
f.append(re.sub(k,"",m))
print ",".join(f)
выход
1,337,1106,1129,1370
Используя sed
, предполагая, что можно использовать любые символы, но есть только 1 пробел....
sed -E "s/^H(.+).*$/\1/g" filename | paste -sd,
Я бы предпочел выбрать grep
, который допускает любые символы и извлекает совпадение до тех пор, пока не будет найден первый пробел
grep -Po "(?<=^H)[^ ]*" filename | paste -sd,