텍스트 파일이 있다고 가정해 보겠습니다.파일변경.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.