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