ファイル名を最後に保持しながら、ファイルパスの途中を変更しますか?

ファイル名を最後に保持しながら、ファイルパスの途中を変更しますか?

bashを使用してファイルパスを操作しようとしています。目標の最初の部分が完了しました。ファイルパスの前半をローカルコンピュータのパスに置き換えました。

$> fp=$"/projects/bison/git/bison_20190405/assessment/LWR/validation/HBEP/analysis/BK363/HBEP_BK363_out.csv"
$> echo $fp | 
    sed -E "s#/projects/bison/git/bison_[0-9]{8}#/Users/djm/Documents/projects/bison#"

$> /Users/djm/Documents/projects/bison/assessment/LWR/validation/HBEP/analysis/BK363/HBEP_BK363_out.csv

次の部分で問題が発生しました。構文解析を含むと/analysis/filename の間のすべての内容を変更したいと思います/doc/figures/FILENAME。 Rscriptを使用してこの関数を作成できましたが、パイプステートメントでファイル名を保持する方法はわかりません。

期待される入力:

/Users/djm/Documents/projects/bison/assessment/LWR/validation/HBEP/analysis/BK363/HBEP_BK363_out.csv

予想出力:

/Users/djm/Documents/projects/bison/assessment/LWR/validation/HBEP/doc/figures/HBEP_BK363_out.csv

以下は、必要な正規表現とともに現在のRscriptです。

library(dplyr)
library(stringr)

test <- "/projects/bison/git/bison_20190405/assessment/LWR/validation/HBEP/analysis/BK363/HBEP_BK363_out.csv"

str_replace_all(test, "/projects/bison/git/bison_[0-9]{8}",
                      "Users/djm/Documents/projects/bison") %>% 
  str_replace_all("(?:analysis).*$", 
                  paste0("doc/figures/", basename(.)))

#> [1] "Users/djm/Documents/projects/bison/assessment/LWR/validation/HBEP/doc/figures/HBEP_BK363_out.csv"

投稿者: 2019-04-09 作成日:代表パッケージ(v0.2.1)

ベストアンサー1

sedをもう一度お試しください

 sed 's#/analysis/.\+/#/doc/figures/#'

あなたのコメント:

$ echo /Users/djm/Documents/projects/bison/assessment/LWR/validation/HBEP/analysis/BK363/HBEP_BK363_out.csv | \
sed 's#/analysis/.\+/#/doc/figures/#'

/Users/djm/Documents/projects/bison/assessment/LWR/validation/HBEP/doc/figures/HBEP_BK363_out.csv

おすすめ記事