Sed
如何用 python 表達式替換 sed/perl 表達式(更改和列印僅匹配的行)?
我問過這個問題是為了了解如何
perl
替換sed
.現在我想知道以下命令(執行相同操作)的樣子
python
:sed -n '/patternmatch/s%stuff%changed%p' file perl -ne 'if ( /patternmatch/ ) { s%stuff%changed%; print }' file
可以寫成單行嗎?選擇?
只是為了好玩:
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
讓我們用一個簡單的例子來做這件事,考慮一個文件,我們將用字元串替換一行的每個數字
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
)將是您的最佳選擇。