将文件中的键/值从unix提取到另一个文件

时间:2014-08-14 17:39:13

标签: bash unix

您好我已经使用此代码从文件中提取键/值到另一个文件

BugReports: https://r-forge.r-project.org/tracker/?group_id=194
NeedsCompilation: no
Repository: CRAN
Date/Publication: 2014-03-02 12:40:42" > FichierTest


IFS=":" 
echo $(while read f1 f2
do 
   echo "$f1 ; $f2" 
done < FichierTest) > test.dsc

test.dsc的内容:

BugReports ;  https //r-forge.r-project.org/tracker/?group_id=194
NeedsCompilation ;  no
Repository ;  CRAN
Date/Publication ;  2014-03-02 12 40 42

我只是想改变第一个冒号&#34;:&#34;分号&#34;;&#34;在每一行

非常感谢

1 个答案:

答案 0 :(得分:3)

为什么不与sed使用一次性匹配?

sed -e 's|:|;|' file

输出:

BugReports; https://r-forge.r-project.org/tracker/?group_id=194
NeedsCompilation; no
Repository; CRAN
Date/Publication; 2014-03-02 12:40:42

或者如果你真的想要替换一切:

sed -e 's|:|;|g' file

输出:

BugReports; https;//r-forge.r-project.org/tracker/?group_id=194
NeedsCompilation; no
Repository; CRAN
Date/Publication; 2014-03-02 12;40;42

如果需要,可以替换空格。

顺便说一句,你的输出在某些部分中获取空格而不是冒号的原因是因为IFS仍然对单词拆分有影响。您必须在其上引用命令替换来修复它:

IFS=":" 
echo "$(while read f1 f2
do 
   echo "$f1 ; $f2" 
done < FichierTest)"

输出:

BugReports ;  https://r-forge.r-project.org/tracker/?group_id=194
NeedsCompilation ;  no
Repository ;  CRAN
Date/Publication ;  2014-03-02 12:40:42

实际做到这一点的正确方法是:

while IFS=: read -r f1 f2; do 
   echo "$f1 ; $f2" 
done < FichierTest