awk / sed для печати только до символа подчеркивания

33513
Rubstr

Как я могу использовать awk или sed для печати строки только до первого символа подчеркивания?

До:

host100_044 2 host101_045 2 host102_046 2 

После:

host100 host101 host102 
8

5 ответов на вопрос

16
Renan

This can be done with cut:

cut -d _ -f 1 

e.g.

$ echo host100_044 2 | cut -d _ -f 1 host100 

Also with awk can be done with awk -F_ '' (probably there is a cleaner way of doing that)

@Renan Как мне изменить эту функцию вырезания, если я хочу, чтобы вывод содержал всю входную информацию в дополнение к выполнению вырезания? BioMan 8 лет назад 0
2
scriptmonster

Еще одна альтернатива для sed:

echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/' 

Если у вас есть это в файле, вы можете назвать это следующим образом;

cat fileName | sed 's/^\(.*\)_.*$/\1/' 
1
jftuga
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} ' | cut -d ' ' -f2- 

Output:

host100 host101 host102 

With newlines:

echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ ' 

Output:

host100 host101 host102 
1
Prince John Wesley

Using sed:

echo host100_044 2 | sed 's;_.*;;' 


Using sed in place edit option,

sed -i.old 's;_.*;;' infile 
Я просто писал то же самое, хотя решение `awk` уже опубликовано (и` cut`, вероятно, лучше в этом случае), так как он спросил о `sed`, но вы меня опередили с секундами :-). Вы даже можете обрезать `$`, так как он будет соответствовать `. *` До конца строки по умолчанию. Daniel Andersson 11 лет назад 0
@DanielAndersson: да. Prince John Wesley 11 лет назад 0
1
Sergey Fadeev
$ echo "host100_044 2" | awk -F'_' '' host100 

В -F'_'инструктирует awkиспользовать знак подчеркивания в качестве поля разделителей. Сам awkскрипт просто печатает первое поле.