Shell 使用sed打印匹配行
stackoverflow.csv文件中的示例数据:Shell 使用sed打印匹配行,shell,unix,sed,Shell,Unix,Sed,stackoverflow.csv文件中的示例数据: foo foo foo foo bar bar bar bar baz baz baz baz 我知道sed-n/foo/p stackoverflow.csv>foo.csv 我会将所有与foo匹配的记录定向到该文件,但我不想在cli上指定匹配模式,我宁愿将其放在脚本中,并将所有foo、bar和baz记录发送到它们自己的文件中 基本上,这是一个脚本: sed -n /foo/p stackoverflow.csv > foo.csv
foo
foo
foo
foo
bar
bar
bar
bar
baz
baz
baz
baz
我知道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
像这样:
#!/bin/sh
sleep 2
sed -n /foo/p > foo.csv
sed -n /bar/p > bar.csv
sed -n /baz/p > baz.csv
这会创建文件,但它们都是空的。
此外,如果脚本只有一个print语句,那么它也可以工作
有输入吗?您没有输入文件名
#!/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
您可以将输入文件作为参数提供给脚本,在这种情况下,将脚本更改为读取参数并将其传递给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
您没有输入文件名
#!/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
您可以将输入文件作为参数提供给脚本,在这种情况下,将脚本更改为读取参数并将其传递给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
这里有一个在循环中使用grep的解决方案,您不需要提前提供每个术语。假设使用bash shell:
for i in $(sort stackoverflow.csv | uniq); do grep $i testfile > $i; done
这里有一个在循环中使用grep的解决方案,您不需要提前提供每个术语。假设使用bash shell:
for i in $(sort stackoverflow.csv | uniq); do grep $i testfile > $i; done
sed中的w命令允许您写入命名文件
sed -n -e '/foo/wfoo.csv' -e '/bar/wbar.csv' \
-e '/baz/wbaz.csv' stackoverflow.csv
并非所有sed方言都接受多重e参数;用换行符分隔命令的多行字符串可能是最可移植的解决方案
sed -n '/foo/wfoo.csv
/bar/wbar.csv
/baz/wbaz.csv' stackoverflow.csv
这将只检查输入文件一次,并在文件中继续时写出匹配的行
若要创建接受一个或多个文件名作为参数的脚本,请将硬编码文件名替换为$@
sed中的w命令允许您写入命名文件
sed -n -e '/foo/wfoo.csv' -e '/bar/wbar.csv' \
-e '/baz/wbaz.csv' stackoverflow.csv
并非所有sed方言都接受多重e参数;用换行符分隔命令的多行字符串可能是最可移植的解决方案
sed -n '/foo/wfoo.csv
/bar/wbar.csv
/baz/wbaz.csv' stackoverflow.csv
这将只检查输入文件一次,并在文件中继续时写出匹配的行
若要创建接受一个或多个文件名作为参数的脚本,请将硬编码文件名替换为$@
我不能执行sh print.sh