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

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

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

GNU awk를 사용하여 match()의 세 번째 인수로 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.

관련 정보