cat 명령을 사용하여 $를 £로 바꾸기

cat 명령을 사용하여 $를 £로 바꾸기

달러 기호( )가 포함된 test_output_archive.svd 파일이 있습니다 $. 달러 기호를 파운드( )로 바꾸는 cat 명령을 사용하여 쉘 스크립트인 Install_dollar_pound.sh를 생성했습니다. £스크립트는 Solaris 10에서 작동하며 달러는 예상대로 대체됩니다. Solaris 11에서는 달러가 교체되지 않고 오류가 발생하지 않습니다.

test_output_archive.svd의 내용: 라인 대여 $9 OOB 단 $10

1단계에서 달러 기호를 파운드로 바꾸고, 2단계에서 정크 문자를 제거하고, 3단계에서 임시 파일을 제거하고, 4단계에서 이름을 바꿉니다**

바꾸기_달러_파운드.sh의 내용: 고양이 test_output_archive.svd | tr "\044" "\243" > temp_archive.svd 고양이 temp_archive.svd | tr -d "\302" > test_output_archive2.svd rm temp_archive.svd mv test_output_archive2.svd test_output_archive.svd

OS가 Solaris 11로 업데이트됨에 따라 수행해야 할 수정 사항은 무엇입니까?

답변1

$정규식에서 특별한 의미를 가지며, "레코드의 끝"을 의미합니다(대부분의 경우 레코드==라인). 그러니 탈출해야 합니다. 이 시도:

sed 's/\$/£/g' file > outfile

답변2

sed 명령에서 특수 문자($)를 이스케이프할 수 있습니다.

$ cat test.txt
£ pound £
$ dollar $
£ pound £
$ dollar $

$ sed 's/\$/£/g' test.txt
£ pound £
£ dollar £
£ pound £
£ dollar £

또는 대안적으로

$ sed 's/[$]/£/g' test.txt
£ pound £
£ dollar £
£ pound £
£ dollar £

답변3

sed설명된 대로 문자열의 모든 발생을 바꾸는 데 사용할 수 있습니다.여기:

sed -i 's/\£/\$/g' FILENAME

옵션 은 파일에 대한 작업을 -i지시하고 , 문자열을 바꾸는 연산자이고, 바꿔야 하는 문자열이며, 각 문자를 바꾸는 문자열 ( 특수 문자이므로 기호를 이스케이프 처리함)이며 모든 인스턴스를 바꾸는 것을 의미합니다.seds\$$\g

편집하다:-i옵션은 Solaris에서는 작동하지 않습니다.이것해결 방법.

관련 정보