텍스트가 포함된 큰 텍스트 파일이 있습니다. 각 단어는 한 줄(일반적인 단어 목록)에 있습니다.
각 단어의 모든 문자 "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/pg
g
( 플래그) 를 모두o
로 바꾸고0
, 대체(플래그)가 이루어지면p
패턴 공간만 표준 출력에 기록됩니다.