尝试从给定文件中获取输入文件和文本行,并使用bash将其保存到其他文件

时间:2017-02-02 05:03:13

标签: bash sed

我所拥有的是一个文件(让我们称之为' xfile'),包含诸如

之类的行
file1 <- this line goes to file1
file2 <- this goes to file2

我想要做的是运行一个脚本来完成实际的线路并将它们写入文件。

我手动完成的方式可能如下(第一行)

(echo "this line goes to file1"; echo) >> file1

所以,要实现自动化,这就是我尝试做的事情

IFS=$'\n'
for l in $(grep '[a-z]* <- .*' xfile); do
$(echo $l | sed -e 's/\([a-z]*\) <- \(.*\)/(echo "\2"; echo)\>\>\1/g')
done
unset IFS

但我得到的是

-bash: file1(echo "this content goes to file1"; echo)>>: command not found
-bash: file2(echo "this goes to file2"; echo)>>: command not found

(在OS X上)

出了什么问题?

2 个答案:

答案 0 :(得分:2)

这解决了您在Linux上的问题

awk -F ' <- ' '{print $2 >> $1}' xfile

注意选择字段分隔符,使新文件没有前导或尾随空格。

尝试OSX

答案 1 :(得分:1)

您可以直接使用bash的正则表达式功能。当您使用=~运算符将变量与正则表达式进行比较时,bash会使用正则表达式中的组匹配来填充BASH_REMATCH数组。

re='(.*) <- (.*)'
while read -r; do
    if [[ $REPLY =~ $re ]]; then
        file=${BASH_REMATCH[1]}
        line=${BASH_REMATCH[2]}
        printf '%s\n' "$line" >> "$file"
    fi
done < xfile