나는 물었다이 문제perl
교체 방법을 알아보세요 sed
.
이제 동일한 작업을 수행하는 다음 명령이 어떻게 보이는지 알고 싶습니다 python
.
sed -n '/patternmatch/s%stuff%changed%p' file
perl -ne 'if ( /patternmatch/ ) { s%stuff%changed%; print }' file
한 줄로 쓸 수 있나요? 선택하다?
답변1
재미로:
python -c 'import sys,fileinput,re;sys.stdout.writelines(re.sub("stuff", "changed", l, 1) for l in fileinput.input() if re.search("patternmatch", l))' file
이러지 마세요 :) sed
//를 사용하세요perl
awk
답변2
간단한 예를 들어 보겠습니다. 파일을 고려하면 줄의 모든 번호를 문자열로 바꿀 것입니다 HELLO
. 줄에 숫자가 없으면 그대로 두십시오.
#!/usr/bin/env python2
import re
with open('file.txt') as f:
for line in f:
if re.search(r'\d', line):
print re.sub(r'\d', 'HELLO', line).rstrip('\n')
else:
print line.rstrip('\n')
시험:
$ cat file.txt
foo bar test
spam 1 egg 5
$ python script.py
foo bar test
spam HELLO egg HELLO
또한 다음을 사용하십시오 sed
.
$ sed '/[[:digit:]]/s/[[:digit:]]/HELLO/g' file.txt
foo bar test
spam HELLO egg HELLO
time
통계를 확인해 보겠습니다 .
$ time sed '/[[:digit:]]/s/[[:digit:]]/HELLO/g' file.txt
foo bar test
spam HELLO egg HELLO
real 0m0.001s
user 0m0.000s
sys 0m0.001s
$ time python script.py
foo bar test
spam HELLO egg HELLO
real 0m0.017s
user 0m0.007s
sys 0m0.010s
보시다시피, 이 경우에는 기본 텍스트 처리 도구( sed
등 awk
)을 사용하는 것이 최선의 선택이 될 것입니다.