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解决方案.
你可以使用这个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)
尝试sed:
sed -n '2p; 4p' inputFile
Run Code Online (Sandbox Code Playgroud)
-n告诉sed抑制输出,但对于行2和4,p(print) 命令用于打印这些行。
您还可以使用范围,例如:
sed -n '2,4p' inputFile
Run Code Online (Sandbox Code Playgroud)