Bash:替换管道标准输入中的子字符串

时间:2014-10-22 21:10:45

标签: bash shell pipe stdin

我尝试用新的子字符串替换stdin中的某个子字符串。在cat读取多个文件后,我必须从管道中获取标准输入。然后我想将更改后的字符串向前推送到管道。

这是我尝试做的事情:

cat file1 file2 | echo ${#(cat)/@path_to_file/'path//to//file'} | ... | ... | ... | ...

我尝试用替换子字符串@path_to_file替换子字符串'path/to/file'(周围的引号是替换子字符串的一部分)。

然而,bash给了我一条错误消息:bad substitution

我有什么想法可以做到这一点?

2 个答案:

答案 0 :(得分:6)

您可以使用命令sed。

cat file1 file2 | sed -e 's/@path_to_file/path/to/file/' ...

答案 1 :(得分:1)

使用参数扩展:

cat file1 file2 | while read -r line; do echo "${line/@path_to_file/path\/to\/file}"; done