2016-08-28 5 views
0

Вот основной покрой синтаксис я использую:Проблема с командой вырезать после выполнения команды сс

[[email protected] ~]$ ss -tn 
State  Recv-Q Send-Q         Local Address:Port             Peer Address:Port    
ESTAB  0  52          xxx.xx.xx.xx:xx             xxx.xx.xx.xx:xx    
ESTAB  0  232          xxx.xx.xx.xx:xx             xxx.xx.xx.xx:xx  

Но когда я пытаюсь сократить на полях, я не получить соответствующий вывод:

[[email protected] ~]$ ss -tn | grep -v State | cut -d$'\t' -f3,4 
ESTAB  0  36  xxx.xx.xx.xx:xx     xxx.xx.xx.xx:xx    
ESTAB  0  68  xxx.xx.xx.xx:xx     xxx.xx.xx.xx:xx 

Единственное, что я могу придумать, это то, что разделитель не является вкладкой, но в этом случае, как я могу получить вывод, который я хочу?

ответ

4

Выход ss разделен пробелами. Я предлагаю использовать AWK:

ss -tn | grep -v State | awk '{print $3,$4}' 
+1

хехехе мы все говорили то же самое. Я думаю, что cyrus hit submit first tho. – webb

3

Если вы не возражаете против использования awk вы можете сделать с (это также сохраняет вызов Grep):

ss -tn | awk '$0!~/State/{print $3, $4}' 
1

Используйте awk вместо этого, который по умолчанию подсчетов один или несколько пробельных символов в качестве одного разделителя:

ss -tn | grep -v State | awk '{print $3,$4}' 

Кроме того, здесь более общий способ, чтобы пропустить первую строку:

ss -tn | tail -n+2 | awk '{print $3,$4}' 
0

Это работает на моей машине. В основном, измените каждое из 8 пробелов на вкладку, удалите другие пробелы.

ss -tn | unexpand -t 8 | tr $'\t' '|' |tr -d [:blank:] | tr '|' $'\t' | expand -t 1 | cut -f4- -d ' ' 

или это один:

ss -tn | expand -t 1 | unexpand -t 8 | cut -f4- -d$'\t'