使用 sed 打印匹配行

Reg*_*ser 2 unix shell sed

我有 stackoverflow.csv 文件中的示例数据:

foo
foo
foo
foo
bar
bar
bar
bar
baz
baz
baz
baz
Run Code Online (Sandbox Code Playgroud)

我知道与sed -n /foo/p stackoverflow.csv > foo.csv

我将获取与 foo 匹配的所有记录定向到该文件,但我不想在 cli 上指定匹配模式,我宁愿将其放入脚本中并将所有记录(foo、bar 和 baz)发送到他们自己的文件。

基本上在脚本中是这样的:

sed -n /foo/p stackoverflow.csv > foo.csv
sed -n /bar/p stackoverflow.csv > bar.csv
sed -n /baz/p stackoverflow.csv > baz.csv
Run Code Online (Sandbox Code Playgroud)

像这样:

#!/bin/sh
sleep 2
sed -n /foo/p > foo.csv
sed -n /bar/p > bar.csv
sed -n /baz/p > baz.csv
Run Code Online (Sandbox Code Playgroud)

这会创建文件,但它们都是空的。另外,如果脚本只有一个打印语句,它也可以工作。

有什么意见吗?

Ami*_*mit 5

您错过了输入文件名

#!/bin/sh
sleep 2
sed -n /foo/p stackoverflow.csv > foo.csv
sed -n /bar/p stackoverflow.csv > bar.csv
sed -n /baz/p stackoverflow.csv > baz.csv
Run Code Online (Sandbox Code Playgroud)

您可以提供输入文件作为脚本的参数,在这种情况下,更改脚本以读取参数并将其传递给命令sed。像这样运行脚本: ./script.sh input_filename,您可以在其中指定不同的输入文件作为参数。

#!/bin/sh

file=${1}

sed -n /foo/p ${file} > foo.csv
sed -n /bar/p ${file} > bar.csv
sed -n /baz/p ${file} > baz.csv
Run Code Online (Sandbox Code Playgroud)