다음 스크립트를 사용하여 텍스트 파일(italian.txt)을 읽고 이 파일의 모든 단어를 이탈리아어에서 영어로 번역하고 출력을 다른 텍스트 파일(english.txt)에 저장하려고 합니다. 단어의 모든 모양을 번역하려면 sed
전역 명령과 함께 명령을 사용해야 합니다 .g
제대로 작동하지 않는데 무엇이 문제인지 모르겠습니다. 누구든지 나를 도와줄 수 있나요?
cat italian.txt | sed -i 's/sole/sun/g' | 's/penna/pen/g' > english.txt
exit 0
답변1
스크립트에 몇 가지 문제가 있습니다.
sed
두 번째 파이프( )|
뒤에 두 번째 파이프를 추가 해야 합니다 .sed -i
사용 중인sed
파일을 지정하지 않고 "그 자리에서" 파일을 편집하도록 지시합니다 . 에서 안전하게 삭제할 수 있으며 이제 스크립트가 작동합니다.sed
stdin
cat
-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
는 일치하지 않음 ), 다음과 같습니다:words
reword
$ 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