Вопрос о форматировании текста с помощью sed из awk

В 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

1
14.04.2019, 16:16
5 ответов

Вы можете использовать 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проще.

3
27.01.2020, 23:22

Или 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 ',заменяет новую строку и пробел одной запятой
0
27.01.2020, 23:22

Я сделал по методу ниже

sed -e "s/H//g" -e "s/\s.*//g" filename | perl -pne "s/\n/,/g"| sed "s/,$//g"

выход

1,337,1106,1129,1370
0
27.01.2020, 23:22

Пробовал и с 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
0
27.01.2020, 23:22

Используя sed, предполагая, что можно использовать любые символы, но есть только 1 пробел....

sed -E "s/^H(.+).*$/\1/g" filename | paste -sd,

Я бы предпочел выбрать grep, который допускает любые символы и извлекает совпадение до тех пор, пока не будет найден первый пробел

grep -Po "(?<=^H)[^ ]*" filename | paste -sd,
0
27.01.2020, 23:22

Теги

Похожие вопросы