awk / sed 仅打印到下划线字符

awk / sed 仅打印到下划线字符

如何使用 awk 或 sed 打印仅到第一个下划线字符的字符串?

前:

host100_044 2
host101_045 2
host102_046 2

后:

host100
host101
host102

答案1

可以通过以下方式完成cut

cut -d _ -f 1

例如

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

awk可以用awk -F_ '{print $1}'(可能有更干净的方法来做到这一点)

答案2

sed 的另一种选择:

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

如果文件中有这些内容,您可以按如下方式调用它;

cat fileName | sed 's/^\(.*\)_.*$/\1/'

答案3

echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} {printf("host%s ", $1)}'  | cut -d ' ' -f2-

输出:

host100 host101 host102

使用换行符:

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

输出:

host100
host101
host102

答案4

$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100

指示使用下划线作为字段分隔符。脚本-F'_'本身只打印第一个字段。awkawk

相关内容