用sed和正则表达式替换tar文件中的文本文件中的行

时间:2016-07-29 21:57:00

标签: regex sed

tar文件b.txt中的文件b.tar包含以下行:

dir1 => /dir1A
dir2 => /dir2A

我想要一个简洁的表达式,用tar文件中的替换它来代替这些行:

dir1 = /dir1B
dir2 = /dir2B

表达式可能依赖于b.txt的副本与a.tar存在于同一目录中的事实。

我的sed技能有点生疏。我尝试了以下但是它还没有完成。我的错是什么?是否有更简洁的版本?

tar df a.tar b.txt
echo b.txt |
  sed \#^dir1[ \t]*=>.*$#dir1 => /dir1B# |
  sed \#^dir2[ \t]*=>.*$#dir2 => /dir2B# |
  tar af a.tar -

1 个答案:

答案 0 :(得分:1)

这(比我原先希望的那样简洁但是)显然可以解决问题:

TMP_DIR=`mktemp -d`
cat b.txt | \
  sed 's#^\(dir1A\s*=\s*\)\(.*\)\(\s*\)$#\1/dir1B\3#' | \
  sed 's#^\(dir2A\s*=\s*\)\(.*\)\(\s*\)$#\1/dir2B\3#' > \
  $TMP_DIR/b.txt
tar fv a.tar --delete ./b.txt
tar fv a.tar -C $TMP_DIR --append ./b.txt
rm -fr $TMP_DIR