私は尋ねたこの問題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
)を使用するのが最善の選択です。