Text-Processing
如何將以給定字元串開頭的所有出現的序列替換為符號的下一次出現?
我想編輯一個巨大的單行文件,其中包含數千次出現的某個字元串
'string_string':
,直到下一次出現逗號,
(包括這個逗號)並從文件中刪除這些出現。我認為要麼
sed
或awk
可以用來做到這一點。它們被宣傳為操作字元串/字元流的工具,但也更適用於多行文件。由於
awk
和sed
命令都可能是某種神秘的,我想在解決日常發生的不同問題的同時學習,我希望您對生成的命令本身進行簡要解釋。我的第一種方法是讓
vim
記錄的序列執行,但現在執行了 3 小時,甚至還沒有接近結束 - 即使它會在某個時間點解決問題,我想知道一個更好、更有效的方法。請求範例:
['string_string': <asdffds.1j2_3>, 'abd_dfA': 212, 'kajaj': <asdffdsa>, 'string_string': <fdjjdjd.asjsk2222>, 'jsjsjsj': 32.23], ['string_string': <asdffds.1j2_3>, 'abd_dfA': 212, 'kajaj': <asdffdsa>, 'string_string': <fdjjdjd.asjsk2222>, 'jsjsjsj': 32.23]
結果:
[ 'abd_dfA': 212, 'kajaj': <asdffdsa>, 'jsjsjsj': 32.23], [ 'abd_dfA': 212, 'kajaj': <asdffdsa>, 'jsjsjsj': 32.23]
如果您
sed
可以處理超過 LINE_MAX 的行(在某些系統上低至 1024 字節),您可以這樣做:sed "s/'string_string':[^,]*,//g" < your-file
如果沒有,您可以隨時使用
perl
:perl -pe "s/'string_string':.*?,//g" < your-file
一種方法,使用字元串處理來監控 string_string 和逗號的位置,一個接一個。在每一對中:
perl -plse ' substr($_,$p-1,$q-$p+1,"") while ++($p=index($_,$s,$q-$p)) && ++($q=index($_,",",$p)); ' -- -s="'string_string':" file