파일에서 읽은 문자열의 시작과 하단에 일부 문자열을 추가합니다.

파일에서 읽은 문자열의 시작과 하단에 일부 문자열을 추가합니다.

저는 다른 프로그램에서 데이터를 가져오는 쉘 스크립트를 작성 중입니다. 해당 변수 값을 사용하여 파일의 내용을 읽고 일부 내용을 이 데이터의 시작과 하단에 추가합니다.

아래는 예입니다:

readonly file_location=$location
readonly client_id = $id
readonly client_types = $type_of_client

여기서 $location, $id 및 $type_of_client 값은 다른 프로그램에서 전달됩니다. 아래는 예입니다:

  • $location은 다음과 같은 전체 경로 이름이 됩니다. /home/david/data/12345678
  • $id는 숫자입니다:120
  • $type_of_client는 공백으로 구분된 단어입니다.abc def pqr

이제 이 위치에는 , 및 /home/david/data/12345678와 같은 파일이 있습니다 . 의미는 항상 동일하므로 하드코딩할 수 있습니다. 이제 위에 표시된 대로 변수를 반복 하고 파일 이름을 만든 다음 전체 파일을 문자열로 읽어야 합니다(또는 다른 더 나은 방법이 있는 경우 그럴 수도 있음). 내 직업은 다음과 같습니다.abc_lop.xmldef_lop.xmlpqr_lop.xml_lop.xmlclient_types

#!/bin/bash

readonly file_location=$location
readonly client_id=$id
readonly client_types=$type_of_client

for word in $client_types
do
    echo $word
    file_value=`cat "file_location"/"$word"_lop.xml`
    echo $file_value
done

이제 쉘 스크립트에서 문자열 조작과 같은 특별한 작업을 수행해야 하는데 어떻게 해야 할지 모르겠습니다. 이제 우리가 읽고 있는 모든 파일의 상단과 하단에 무언가를 추가해야 합니다. 이 파일에서 읽은 값에 관계없이 말이죠. 다음과 같이 똑같은 작업을 수행해야 합니다.

예: abc_lop.xml다음 명령을 사용하여 파일을 보면 다음과 같습니다 vi.

<Hello version="100">

<!-- some stuff here -->

</Hello>

다음과 같이 만들어야 합니다.

<hello_function>
<name>Data</name>
<Hello version="100">

<!-- some stuff here -->

</Hello>
</hello_function>

보시다시피 상단에 추가 <hello_function><name>Data</name>하고 하단에 추가했습니다 </hello_function>. 쉘 스크립트에서 이것을 어떻게 할 수 있나요?

따라서 일반적으로 echo $file_value위의 각 추가 값은 인쇄되어야 합니다 client_types.

#!/bin/bash

readonly file_location=$location
readonly client_id=$id
readonly client_types=$type_of_client

for word in $client_types
do
    echo $word
    file_value=`cat "file_location"/"$word"_lop.xml`
    // may be do something here?
    echo $file_value // this should print out appended string value both at top and bottom.
done

각 XML 파일은 확실히 10MB보다 작습니다.

답변1

수행 중인 작업이 데이터 출력뿐이라면 변수를 읽을 필요가 없습니다. 메인 루프의 경우:

for word in $client_types; do
    echo "$word"
    echo '<hello_function>'
    echo '<name>Data</name>'
    cat "$file_location/${word}_lop.xml"
    echo '</hello_function>'
done

물론 이렇게 하면 수정된 모든 파일이 연결되어 나중에 분리하기 어려울 수 있습니다. 하지만 작동합니다.

편집: 별도의 파일로 출력하려면 다음을 수행하십시오.

for word in $client_types; do
    fn="${word}"_new.xml
    echo "$word"
    echo '<hello_function>' >>"$fn"
    echo '<name>Data</name>' >>"$fn"
    cat "$file_location/${word}_lop.xml" >>"$fn"
    echo '</hello_function>' >>"$fn"
done

물론 각 파일에 무엇을 포함시키려는지에 따라 다릅니다.

관련 정보