如何从脚本中的文件或管道中选择多行?

Bra*_*rks 7 linux bash text-processing sed

我想要一个脚本,称为lines.sh可以管道数据以选择一系列行.

例如,如果我有以下文件:

的test.txt

a 
b
c
d
Run Code Online (Sandbox Code Playgroud)

然后我可以运行:

cat test.txt | lines 2,4
Run Code Online (Sandbox Code Playgroud)

它会输出

b
d
Run Code Online (Sandbox Code Playgroud)

我正在使用zsh,但如果可能的话,我更喜欢使用bash解决方案.

anu*_*ava 7

你可以使用这个awk:

awk -v s='2,4' 'BEGIN{split(s, a, ","); for (i in a) b[a[i]]} NR in b' file
two
four
Run Code Online (Sandbox Code Playgroud)

通过单独的脚本lines.sh:

#!/bin/bash
awk -v s="$1" 'BEGIN{split(s, a, ","); for (i in a) b[a[i]]} NR in b' "$2"
Run Code Online (Sandbox Code Playgroud)

然后给出执行权限:

chmod +x lines.sh
Run Code Online (Sandbox Code Playgroud)

称之为:

./lines.sh '2,4' 'test.txt'
Run Code Online (Sandbox Code Playgroud)


pfn*_*sel 5

尝试sed

sed -n '2p; 4p' inputFile
Run Code Online (Sandbox Code Playgroud)

-n告诉sed抑制输出,但对于行24p(print) 命令用于打印这些行。

您还可以使用范围,例如:

sed -n '2,4p' inputFile
Run Code Online (Sandbox Code Playgroud)