Tri*_*ian 11 bash sed here-document
我想对 sed 命令使用 here-doc 并提供要读取的文件和输出文件。
我已经查看了Advanced Bash Scripting guide中的Here-Documents,但它没有提到使用 here-doc 时关于常规参数的任何内容。甚至有可能吗?
我想实现以下目标:
#!/bin/bash
OUT=/tmp/outfile.txt
IN=/my_in_file.txt
sed $IN << SED_SCRIPT
s/a/1/g
s/test/full/g
SED_SCRIPT
> $OUT;
Run Code Online (Sandbox Code Playgroud)
任何帮助都非常感谢。
cam*_*amh 17
你可以告诉 GNU sed 从标准输入读取脚本-f -,-f意思是从文件读取脚本,-意思是标准输入,这在很多命令中都很常见。
sed -f - "$IN" > "$OUT" << SED_SCRIPT
s/a/1/g
s/test/full/g
SED_SCRIPT
Run Code Online (Sandbox Code Playgroud)
POSIX sed 也支持-f,但-没有记录用于标准输入。在这种情况下,您可以/dev/stdin在 Linux 系统上使用(我似乎记得 Solaris 也有这个,但我现在无法确认)
使用<<-SED_SCRIPT(带有“-”前缀)将允许SED_SCRIPT缩进结束标记。
如果sed不支持从stdin(使用-f -)读取脚本,您可以使用进程替换(在bash、zsh、 中可用ksh93):
sed "$IN" > "$OUT" -f <( cat << SED_SCRIPT
s/a/1/g
s/test/full/g
SED_SCRIPT)
Run Code Online (Sandbox Code Playgroud)
右括号)必须紧跟在结束分隔符 ( SEC_SCRIPT) 之后或在换行符之后。在流程替换的情况下,您还可以使用echo代替此处的文档:
sed "$IN" > "$OUT" -f <( echo \
" s/a/1/g
s/test/full/g" )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6505 次 |
| 最近记录: |