0

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

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

为了使用 then /bin/cp $line then for each read line ...

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

有什么好主意吗?

谢谢

4

4 回答 4

3

这应该可以解决问题:

while IFS= read -r file1 file2; do 
    cp $file2 $file1
done < file 
于 2013-05-28T15:52:58.517 回答
1

您可以使用以下循环:

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

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

于 2013-05-28T15:53:58.993 回答
0

如果你可以使用awk,这很简单:

awk '{print $2 " " $1}' sample > sample2
于 2013-05-28T15:55:14.260 回答
0

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

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

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

a b c d e -> e a b c d
于 2013-05-28T15:52:49.670 回答