bash 스크립트를 사용하여 파일의 특정 위치에 있는 텍스트를 다른 파일에 있는 텍스트로 어떻게 바꾸나요?

bash 스크립트를 사용하여 파일의 특정 위치에 있는 텍스트를 다른 파일에 있는 텍스트로 어떻게 바꾸나요?

텍스트 파일이 있다고 가정해 보겠습니다.파일변경.txt:

3.141592       pi
6.626068       planck

# Like this and like that and like this
..1     kd6-officer kd6-officer
us..0 kd6-3.7
us00..0 kd6-3.8
us00..0 kd6-3.9
us00..0 kd6-3.1

그리고 두 번째 파일이 있는데,하위파일.txt:

subtext

나는 두 번째 열, 두 번째 줄에 있는 단어를 바꾸고 싶습니다.파일변경.txt이라는 단어와 함께하위파일.txt; 에 있는 단어하위파일.txt항상 그런 것은 아닙니다 subtext. 에 있는 단어파일변경.txt항상 그렇지는 않을 것이다 planck. 두 파일의 두 단어가 모두 다음과 같다고 가정하는 것이 가장 좋습니다.언제나전혀 다른 말이 됩니다.

답변1

두 번째 줄의 줄이 끝나기 전에 공백이 아닌 문자를 변경하려면 다음을 사용할 수 있습니다.

sed -i'' -e '2{s/[^[:blank:]]*$/'"$(cat subfile.txt)"'/;}' filetobechanged.txt

-i''옵션은 파일을 내부(GNU/BSD sed)에서 편집합니다. 의 단어에는 문자가 subfile.txt포함되어 있지 않을 수 있습니다. 그렇지 않으면 명령의 '를 단어에 없는 문자(예: 또는 ) /로 바꿔야 합니다 ./@,

답변2

필드 사이에 공백을 유지하는 데 신경 쓰지 않으면 모든 UNIX 상자의 모든 쉘에서 awk를 사용하여 작동하고 단순히 리터럴 문자열 할당을 수행하기 때문에 두 입력 파일에 문자가 제공됩니다.

awk 'NR==FNR{new=$0; next} NR==2{$2=new} 1' subfile.txt filetobechanged.txt

당신이 신경 쓴다면:

awk 'NR==FNR{new=$0; next} NR==2{sub(/[^[:space:]]+$/,""); $0=$0 new} 1' subfile.txt filetobechanged.txt

match()의 세 번째 인수에 대해 GNU awk를 사용하여 Y 번째 줄의 X 번째 단어를 바꾸려면 다음을 수행하십시오.

awk -v x=5 -v y=3 '
    NR==FNR { new=$0; next }
    FNR==y {
        match($0,"([[:space:]]*([^[:space:]]+[[:space:]]+){"x-1"})[^[:space:]]+(.*)",a)
        $0 = a[1] new a[3]
    }
1' subfile.txt filetobechanged.txt

예:

$ cat subfile.txt
[[[ \1 ~`!@#$%^&*()_-+={[}]|\:;"'<,>.?/ ]]]

$ cat filetobechanged.txt
Now is the winter of our discontent
Made glorious summer by this sun of York;
And all the clouds that lour'd upon our house
In the deep bosom of the ocean buried.

$ awk -v x=5 -v y=3 '
    NR==FNR { new=$0; next }
    FNR==y {
        match($0,"([[:space:]]*([^[:space:]]+[[:space:]]+){"x-1"})[^[:space:]]+(.*)",a)
        $0 = a[1] new a[3]
    }
1' subfile.txt filetobechanged.txt
Now is the winter of our discontent
Made glorious summer by this sun of York;
And all the clouds [[[ \1 ~`!@#$%^&*()_-+={[}]|\:;"'<,>.?/ ]]] lour'd upon our house
In the deep bosom of the ocean buried.

비슷한 일을하고 싶다면 sed다음을 참조하십시오.https://stackoverflow.com/q/29613304/1745001.

관련 정보