逐行读取文件并将每次两个字符串存储到两个不同的变量中

时间:2013-05-28 15:45:55

标签: bash

我有一个文件,每行包含两个用空格分隔的绝对路径文件名。 我只想将它们中的每一个变成一个不同的变量,以便将第二个复制到第一个变量上。 我用sed + regex和变量替换尝试了它,没有反应。

sed -e 's/(.*)\s(.*)/$2 $1/g'  filename

然后为每个读取行使用then / bin / cp $ line ...

接下来,我在这里搜索bash中的while循环,但似乎没有一个正常工作。 在perl中它会很容易但在这种情况下我不能使用它。 我必须从bash脚本中完成...

有什么好主意吗?

由于

4 个答案:

答案 0 :(得分:3)

这应该可以解决问题:

while IFS= read -r file1 file2; do 
    cp $file2 $file1
done < file 

答案 1 :(得分:1)

您可以使用以下循环:

while read line; do
  first = ${line%% ?*}
  second = ${line##?* }
  cp $first $second
done < filename

其中filename是您要拆分的文件。

答案 2 :(得分:0)

在sed中,你必须反斜杠括号以赋予它们特殊的含义。此外,捕获的组由\1引用,而不是$1

sed -e 's/\(.*\)\s\(.*\)/\2 \1/g'  filename

我不确定是否需要/g,但您没有提供样本数据,所以我们无法分辨。对于具有两个以上路径的行,它可能不会做你想要的,因为*是贪婪的:

a b c d e -> e a b c d

答案 3 :(得分:0)

如果您可以使用awk,那很简单:

awk '{print $2 " " $1}' sample > sample2