sed 명령을 사용하여 번역

sed 명령을 사용하여 번역

다음 스크립트를 사용하여 텍스트 파일(italian.txt)을 읽고 이 파일의 모든 단어를 이탈리아어에서 영어로 번역하고 출력을 다른 텍스트 파일(english.txt)에 저장하려고 합니다. 단어의 모든 모양을 번역하려면 sed전역 명령과 함께 명령을 사용해야 합니다 .g

제대로 작동하지 않는데 무엇이 문제인지 모르겠습니다. 누구든지 나를 도와줄 수 있나요?

cat italian.txt | sed -i 's/sole/sun/g' | 's/penna/pen/g' > english.txt

exit 0 

답변1

스크립트에 몇 가지 문제가 있습니다.

  1. sed두 번째 파이프( ) |뒤에 두 번째 파이프를 추가 해야 합니다 .
  2. sed -i사용 중인 sed파일을 지정하지 않고 "그 자리에서" 파일을 편집하도록 지시합니다 . 에서 안전하게 삭제할 수 있으며 이제 스크립트가 작동합니다.sedstdincat-i

수정된 스크립트는 다음과 같아야 합니다.

cat italian.txt | sed 's/sole/sun/g' | sed 's/penna/pen/g' > english.txt

답변2

당신은 그것을 잘못 사용했습니다.

첫째, 고양이가 필요하지 않습니다. sed파일 이름을 읽을 수 있습니다. 이와 같이:

sed 's/sole/sun/g' italian.txt

sed둘째, 다음 표현식에는 파이프 리디렉션이 필요하지 않습니다 . 필요한 경우 다음과 같아야 합니다.

sed 's/sole/sun/g' italian.txt | sed 's/penna/pen/g' > english.txt

, 하지만 그건 추가 작업입니다. sed여러 표현식을 처리할 수 있습니다. «;»로 구분하거나 각 인수 앞에 sed명령줄 인수로 추가할 수 있습니다.-e

요약하면 명령은 다음과 같습니다.

sed 's/sole/sun/g; s/penna/pen/g' italian.txt > english.txt

답변3

예를 들어, 단어 쌍이 포함된 파일이 있는 경우

sole sun
penna pen

...etc. 이탈리아어와 영어로 된 많은 단어의 경우(암기 외에는 실제 제한이 없음) 스크립트를 만들 수 있습니다 sed.

s/\<sole\>/sun/g
s/\<penna\>/pen/g

...( \<word\>단어만 일치 하고 예를 들어 or word는 일치하지 않음 ), 다음과 같습니다:wordsreword

$ awk '{ printf("s/\\<%s\\>/%s/g\n", $1, $2) }' pairs.txt >translate.sed

sed그런 다음 이 스크립트를 텍스트 파일에 적용할 수 있습니다 .

$ sed -f translate.sed italian.txt >english.txt

답변4

@Kusalanananda의 아이디어 변형:

$ cat dict
sole:sun
penna:pen

$ sed -f <(sed -r 's!(.+):(.+)!s/\\<\1\\>/\2/g!' dict)   it.txt >en.txt

관련 정보