awk / sed仅打印下划线字符


10

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

之前:

host100_044 2
host101_045 2
host102_046 2

后:

host100
host101
host102

Answers:


20

这可以通过以下方式完成cut

cut -d _ -f 1

例如

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

awk可以使用awk -F_ '{print $1}'(可能有一种更干净的方法)


@Renan如果我希望输出除了执行剪切之外还包含所有输入信息,我该如何修改此剪切功能?
BioMan

2

sed的另一种选择:

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

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

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

1
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

1

使用sed

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


使用sed就地编辑选项,

sed -i.old 's;_.*;;' infile

既然他已经提出了,尽管awk已经发布了解决方案(并且cut在这种情况下可能是最好的)sed,但他只是写了一样的东西,但您却以秒胜负我:-)。您甚至可以删除$,因为.*默认情况下它将与行尾匹配。
丹尼尔·安德森

@DanielAndersson:是的。
约翰·卫斯理亲王


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.