在文本文件中打印第二行

hen*_*kay 7 command-line text-processing

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

10.10.10.160:1111
10.10.10.170:2222
10.10.10.180:3333
Run Code Online (Sandbox Code Playgroud)
grep -m 1 -o '.*' filename | cut -d ':' -f
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的方法,我只能得到 1 行输出。

10.10.10.160
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用

grep -m 2 -o '.*' filename | cut -d ':' -f
Run Code Online (Sandbox Code Playgroud)
10.10.10.160
10.10.10.170
Run Code Online (Sandbox Code Playgroud)

我明白了上面的内容。

如果我只想得到第二行

10.10.10.170
Run Code Online (Sandbox Code Playgroud)

有什么办法吗?

sta*_*bra 25

head -2 filename | tail -1 | cut -d ':' -f 1   
Run Code Online (Sandbox Code Playgroud)


ste*_*ver 17

我建议 awk 用于此类任务:

awk -F: 'NR==2 {print $1}' filename
Run Code Online (Sandbox Code Playgroud)

或者使用 sed:

sed -n '2s/:.*//p' filename
Run Code Online (Sandbox Code Playgroud)

如果文件很大,您可能需要将它们更改为

awk -F: 'NR==2 {print $1; exit}' filename
Run Code Online (Sandbox Code Playgroud)

sed -n '2{s/:.*//p;q;}' filename
Run Code Online (Sandbox Code Playgroud)

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


kar*_*rel 8

grep -m 2 -o '.*' filename | cut -d ':' -f 1 | tail -n 1
Run Code Online (Sandbox Code Playgroud)

结果:

10.10.10.170
Run Code Online (Sandbox Code Playgroud)

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

原始文本文件名为 filename。


Bea*_*nog 8

你可以使用这个sed命令:

sed -e '2!d' -e 's/:.*//' filename
Run Code Online (Sandbox Code Playgroud)

或者,以更紧凑的方式:

sed '{2!d; s/:.*//; q;}' filename
Run Code Online (Sandbox Code Playgroud)
  • 2!d告诉sed删除 ( d) 除 ( !) 第二 ( 2) 行之外的所有行。
  • 's/:.*//'告诉sed删除之后的所有内容:(包括:)。
  • 在第二种情况下q,用于在操作完成后立即终止操作(对于较大的文件很有用 - 感谢 @JoL 的建议)。

  • *可能*更容易阅读:`sed -n 2p` (2认同)