![줄 번호를 사용하여 전체 줄을 파일 경로가 포함된 다른 줄로 바꿉니다.](https://linux55.com/image/122807/%EC%A4%84%20%EB%B2%88%ED%98%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%A0%84%EC%B2%B4%20%EC%A4%84%EC%9D%84%20%ED%8C%8C%EC%9D%BC%20%EA%B2%BD%EB%A1%9C%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EB%8B%A4%EB%A5%B8%20%EC%A4%84%EB%A1%9C%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
파일에서 Old_String을 New_String으로 바꾸는 방법은 무엇입니까?
이전 문자열:
$result = $client->updateInventory("UpdateInventory.xml");새 문자열:
$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml");
줄 번호 = 5에 있는 file1.txt라는 파일의 Old_String
내가 시도한 것:
sed '5s/.*/'$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml");'/' file1.txt
답변1
다음 명령을 사용하면 동일한 효과를 얻을 수 있습니다
sed "5s:.*:'$'result = '$'client->updateInventory('/Desktop/new/UpdateInventory.xml');:g" filename | sed "s:'$':$:g" | tr "'" '"'
답변2
내부 작은따옴표를 제거합니다. 외부 명령을 종료하므로 $result
확장되며 완료되지 않은 명령 sed
에 대해 불평할 수 있습니다 .s
s
대신 슬래시 대신 거의 모든 것을 사용하여 명령에 다른 구분 기호를 사용할 수 있습니다 . 그래서
sed '5s_.*_$result = $client->updateInventory("/Desktop/new/UpdateInventory.xml");_' file1.txt
당신이 원하는 것.
답변3
또 다른 방법은 c
다음 명령을 사용하여 주소로 지정된 행을 지우는 것입니다.
$ seq 5 | sed '2c\
foobar'
1
foobar
3
4
5
$ # with GNU-sed, assuming \ is not first character
$ seq 5 | sed '2cfoobar'
s
대체 문자열에 특수 문자가 있는 경우 및 명령 모두 c
에 문제가 있습니다 . 예를 들면 다음과 같습니다.
$ seq 3 | sed '2s/.*/abc&xyz/'
1
abc2xyz
3
$ seq 3 | sed '2cabc\tabc'
1
abc abc
3
이 문제를 처리하는 안정적인 방법은 r
다음 명령을 사용하는 것입니다.
$ echo 'foo&\t\n\1///\\xyz' > f1
$ seq 3 | sed -e '2rf1' -e '2d'
1
foo&\t\n\1///\\xyz
3
답변4
awk 명령을 사용하여 결과를 얻을 수도 있습니다.
awk ‘NR==5 {gsub(".*","$result = $client->updateInventory(/Desktop/new/UpdateInventory.xml);",$0);print $0}' filename| sed 's/(/&"/g' | sed 's/)/"&/g'