簡體   English   中英

用sed和正則表達式替換tar文件中文本文件中的行

[英]Replace lines in text file inside tar file with sed and regular expressions

文件b.txt在tar文件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 -

這(比我最初希望的要簡潔一些,但是)顯然可以解決問題:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM