sed는 파일 이름의 일부를 동일한 하위 문자열을 가진 다른 파일의 내용으로 복사합니다.

sed는 파일 이름의 일부를 동일한 하위 문자열을 가진 다른 파일의 내용으로 복사합니다.

지정된 확장자를 가진 디렉터리의 각 파일에 대해 파일 이름의 하위 문자열만 사용하여 다른 파일에 추가하고 확장자는 다르지만 하위 문자열은 동일한 파일로 출력하고 싶습니다.

내가 하고 싶은 일과 유사한 몇 가지 예제를 찾았지만 bash 스크립트를 작성 중이어서 몇 가지 어려움이 있고 예제를 찾는 데 어려움을 겪고 있습니다.

예를 들어, filename.sample로 시작하고 하위 문자열 "filename"만 원합니다.

내가하려는 것은 다음과 같습니다.

for i in /path/to/*.sample
do
   bar="${i%%.sample*}"
   sed "s/^>\(.*\)/>\1;label=${bar##*/};/" "$i" > "$i"_bar  \;
done

파일의 내용은 *.sample다음과 같습니다.

*.sample

> MEWFJWRNFF_141
AB28974UJBDASX

원하는 출력은 다음과 같습니다.

Output_bar
> MEWFJWRNFF_141; label=filename;
AB28974UJBDASX

불분명한 점이 있으면 알려주세요! 감사합니다!

답변1

for i in /path/to/*.sample
do
    str="; label=$(basename -s.sample $i);"
    sed "/^>/ s/$/$str/" "$i"
done
  • basename이 명령은 경로를 제외하고 파일 이름만 제공합니다. -s.sample확장 프로그램을 제거 합니다
  • 따라서 이면 i다음을 포함합니다 /path/to/filename.sample.str; label=filename;
  • /^>/ s/$/$str/로 시작하는 줄을 찾아 >변수의 내용을 str줄 끝에 추가합니다.

출력 파일의 이름을 어떻게 지정하려는지 이해할 수 없습니다. 그렇다면 주어질 것 입니다 i./path/to/filename.sample"$i"_bar/path/to/filename.sample_bar

관련 정보