큰 단어 목록에서 "o"를 "0"으로 바꾸고 원래 단어를 저장하시겠습니까?

큰 단어 목록에서 "o"를 "0"으로 바꾸고 원래 단어를 저장하시겠습니까?

텍스트가 포함된 큰 텍스트 파일이 있습니다. 각 단어는 한 줄(일반적인 단어 목록)에 있습니다.

각 단어의 모든 문자 "o"를 숫자 "0"으로 바꾸고 새로 형성된 단어를 원래 단어 뒤의 다음 줄에 붙여넣고 싶습니다.

예를 들어, 목록에 다음 두 개가 있는 경우:

dog
someone

작업 후 파일은 다음과 같아야 합니다.

dog
d0g
someone
s0me0ne

sed이 작업을 수행하기 위해 GNU 도구를 어떻게 사용하거나 기다릴 수 있습니까 awk?

답변1

당신은 그것을 사용할 수 있습니다 sed:

sed -i -e 'p' -e 's/o/0/g' file

설명하다:

  • -i: 파일의 내부 편집을 활성화합니다.
  • -e 'p': 그냥 라인을 붙여넣으세요
  • -e 's/o/0/g': o를 0으로 바꾸고 변경된 줄을 붙여 넣습니다.

해결책 을 원한다면 awk:

awk '1;gsub("o", "0")' file >new_file

답변2

모든 행이 일치하면 Chaos의 대답은 괜찮습니다. 그러나 일부 행이 포함되지 않으면 o반복됩니다.
예를 들어:

$ echo -e 'foo\nbar' | sed -e 'p' -e 's/o/0/g'
foo
f00
bar
bar

 

행을 반복하지 않는 다른 솔루션은 다음과 같습니다.

$ echo -e 'foo\nbar' | sed -e '/o/ p; s//0/g' 
foo
f00
bar

 

$ echo -e 'foo\nbar' | perl -pe '/o/ && print; s/o/0/g'
foo
f00
bar

 

$ echo -e 'foo\nbar' | awk '{ print } /o/ { gsub(/o/, "0"); print }' 
foo
f00
bar

답변3

또 다른 sed해결책:

sed -ne 'p;s/o/0/pg' file

$ printf '%s\n%s\n' 'foo' 'bar' | sed -ne 'p;s/o/0/pg'
foo
f00
bar

설명하다

  • -n옵션은 sed기본 출력을 억제합니다.
  • p이 명령은 패턴 공간을 표준 출력에 기록합니다.
  • s/o/O/pgg( 플래그) 를 모두 o로 바꾸고 0, 대체(플래그)가 이루어지면 p패턴 공간만 표준 출력에 기록됩니다.

관련 정보