打印文本文件的第二行

打印文本文件的第二行

我有一个返回以下文本的文件:

10.10.10.160:1111
10.10.10.170:2222
10.10.10.180:3333
grep -m 1 -o '.*' filename | cut -d ':' -f

我尝试了上述操作,但只能得到一行输出。

10.10.10.160

但是当我尝试

grep -m 2 -o '.*' filename | cut -d ':' -f
10.10.10.160
10.10.10.170

我明白以上内容。

如果我只想得到第二行

10.10.10.170

有什么办法吗?

答案1

head -2 filename | tail -1 | cut -d ':' -f 1   

答案2

我建议使用 awk 来完成这类任务:

awk -F: 'NR==2 {print $1}' filename

或者使用 sed:

sed -n '2s/:.*//p' filename

如果文件是大的,你可能想把它们改成

awk -F: 'NR==2 {print $1; exit}' filename

sed -n '2{s/:.*//p;q;}' filename

以避免不必要地处理后面的行。

答案3

grep -m 2 -o '.*' filename | cut -d ':' -f 1 | tail -n 1

结果:

10.10.10.170

tail -n 1仅打印结果的最后一行grep -m 2 -o '.*' filename | cut -d ':' -f 1

原始文本文件名为filename。

答案4

您可以纯粹使用 shell(假设是 bash)来完成此操作,而无需使用任何其他实用程序:

{
    read
    IFS=: read ip port
    echo $ip
} < input.txt

从末尾开始, 重定向<input.txt命令{ }组。然后,第一个命令read读取 1 行并将其丢弃。第二个命令read读取下一行,并IFS用冒号 分隔:。第二个命令用第二行的第 1 个和第 2 个元素read填充ipport变量。$ip变量是 的输出echo

相关内容