我有一个文件,每行包含两个用空格分隔的绝对路径文件名。 我只想将它们中的每一个变成一个不同的变量,以便将第二个复制到第一个变量上。 我用sed + regex和变量替换尝试了它,没有反应。
sed -e 's/(.*)\s(.*)/$2 $1/g' filename
然后为每个读取行使用then / bin / cp $ line ...
接下来,我在这里搜索bash中的while循环,但似乎没有一个正常工作。 在perl中它会很容易但在这种情况下我不能使用它。 我必须从bash脚本中完成...
有什么好主意吗?
由于
答案 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